home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / telecomm / 517 / omnibus2 / source.lst < prev   
File List  |  1991-05-30  |  119KB  |  3,749 lines

  1. ' OMNIBUS2 English version
  2. ' LET version$="V.2.4v "+CHR$(225)+"-Test"      ! Versions-Nummer
  3. ' ACTUAL (Datensatz binaer; Ed_alloc% (Malloc f. Editor) eingebaut)
  4. ' struct (Modemabfrage numerisch; Hauptschleife abgetrennt; ANSI ansehen)
  5. ' VT100  (Gag, Bildschirmwechsel eingebaut)
  6. '        (Log-on-Warnung, Caption auf STBY bei ANSI ansehen)
  7. '        (Alle Bildschirmausgaben mit Bios)
  8. '        (Sequenzer voll numerisch, voll Bios, optimiert)
  9. '        (Rechner-Erkennung; selbstinstallierend)
  10. '        (Bildschirm-Retter von 32000 eingerichtet)
  11. '        (Datei anschauen via Bload in Bildschirm-Retter)
  12. ' omnibus2 Data Terminal V 1.0 Beta-Test
  13. ' Paul Batt, Kernstrasse 27, 8004 Zurich, Switzerland
  14. '
  15. ' ----------------------------- Voreinstellungen ------------------------------
  16. '
  17. phystop%=LPEEK(&H42E)/1024/1024
  18. PRINT
  19. PRINT
  20. PRINT "    Beta test System"
  21. PRINT "    ----------------"
  22. PRINT
  23. PRINT
  24. PRINT "    ";phystop%;"-MEGA-RAM-Computer"
  25. start_sysfre%=GEMDOS(&H48,L:-1)
  26. PRINT !                              .
  27. PRINT "    Free RAM:                 ";start_sysfre%
  28. PRINT "    Not used:                 ";FRE(0)
  29. PRINT
  30. PRINT "    Make use of not used RAM:"
  31. PRINT
  32. '
  33. shrink%=FRE(0)-48*1024 !
  34. RESERVE FRE(0)-shrink%
  35. PRINT "    Not used:                 ";FRE(0)
  36. new_sysfre%=GEMDOS(&H48,L:-1)
  37. dat%=GEMDOS(&H48,L:2048)
  38. '
  39. @dimens
  40. @get_std_var
  41. @read_dat
  42. m_edal%=ed_alloc%*100
  43. '
  44. PRINT "    Free System RAM:          ";new_sysfre%
  45. PRINT
  46. PRINT "    For editor:               ";m_edal%
  47. '
  48. cpt_alloc%=new_sysfre%-32512-2048-512-512-8-8-m_edal%
  49. capt%=GEMDOS(&H48,L:cpt_alloc%)
  50. puff%=GEMDOS(&H48,L:512)
  51. log%=GEMDOS(&H48,L:512)
  52. mod%=GEMDOS(&H48,L:8)
  53. seq%=GEMDOS(&H48,L:8)
  54. '
  55. scrn%=GEMDOS(&H48,L:32512)              ! Geschuetzter Speicher fuer Screen
  56. log_scrn%=INT(scrn%/256)*256            ! Adresse des logischen Screens
  57. phs_scrn%=XBIOS(2)                      ! Adresse des physikalischen Screens
  58. '
  59. ON ERROR GOSUB fehler                   ! EOF-Fehlermeldung ignorieren
  60. '
  61. '                                       +-------------------------------------+
  62. SPOKE &H484,PEEK(&H484) OR 8            ! kbshift-Meldung ein; zum Erkennen   |
  63. '                                       ! der Sontertasten Alt, Ctr, Shift    |
  64. '                                       ! etc. Der Befehl setzt im Supervisor-|
  65. '                                       ! Modus (Zugriff auf Betriebs-System- |
  66. '                                       ! Routinen, eigentlich verboten!) an  |
  67. '                                       ! der Speicheradresse $484 das dritte |
  68. '                                       ! Bit. TOS meldet dann beim Aufruf der|
  69. '                                       ! GemDOS Nr. 7 ("Direct Con in without|
  70. '                                       ! Echo")-Funktion das sogenannte      |
  71. '                                       ! Shift-Byte, das das Erkennen von    |
  72. '                                       ! Tasten-Kombinationen erlaubt. Die   |
  73. '                                       ! Speicherstelle $484 befindet sich   |
  74. '                                       ! in allen TOS-Versionen, auch in den |
  75. '                                       ! zukuenftigen an der gleichen Stelle.|
  76. '                                       ! Das Shift-Byte wird in der Prozedur |
  77. '                                       ! Terminal zweiter Teil benutzt.      |
  78. '                                       +-------------------------------------+
  79. LET version$="V.2.4v "+CHR$(225)+"-Test"      ! Versions-Nummer
  80. '
  81. ' -------------------------- Voreinstellungen ---------------------------------
  82. '
  83. capton!=TRUE                        ! Capture am Anfang on (Default)
  84. c_s%=100                            ! Beginn der Capture-Anzeige
  85. CLR c_ss%                           ! Caption Schritte-Zaehler
  86. c_percent%=cpt_alloc%/100           ! Caption Prozent-Zaehler
  87. count_capt%=capt%                   ! Caption-Zaehler
  88. modck!=FALSE                        ! Modem-Abfrage (wenn On line)
  89. CLR mlen%                           ! Zaehler fuer Modem-Abfrage
  90. CLR slen%                           ! Zaehler fuer Sequenz-Abfrage (ANSI/VT100)
  91. logon!=FALSE                        ! Log am Anfang off (Default)
  92. CLR log_nr%                         ! Default-Logdatei-Numerierung
  93. count_log%=log%                     ! Log-Speicher-Zaehler
  94. von_tr!=FALSE                       ! Beginn Terminal nach Senden
  95. from_term!=FALSE                    ! Beginn Para-Formular n. Terminal-Formular
  96. from_alt!=FALSE                     ! Flag Formular-Aufruf von Main oder Alt
  97. LET del_lines$=CHR$(27)+"M"         ! Zeile loeschen (s. Terminal)
  98. '                                   +------------------------------------+
  99. '                                   |   Xmodem-Variabeln und Setting:    |
  100. '                                   +------------------------------------+
  101. soh=1                               ! [S]tart [O]f [H]eader
  102. eot=4                               ! [E]nd [O]f [T]ransmission
  103. ack=6                               ! [ACK]nowledge
  104. nak=21                              ! [N]egative [A]c[K]nowledge
  105. can=24                              ! [CAN]cel
  106. ' Dim Iorec_buffer$(1024)
  107. ' Iorec
  108. ' Set_iorec_buffer
  109. '
  110. speed$(1)=" 300"
  111. speed$(2)=" 600"
  112. speed$(3)="1200"
  113. speed$(4)="2400"
  114. speed$(5)="4800"
  115. speed$(6)="9600"
  116. speed$(7)="    "
  117. bbaud$(1)="9"
  118. bbaud$(2)="8"
  119. bbaud$(3)="7"
  120. bbaud$(4)="4"
  121. bbaud$(5)="2"
  122. bbaud$(6)="1"
  123. bbaud$(7)="#"
  124. '
  125. RESTORE boxdata                        ! Cover-Box fuer Show_capt erstellen
  126. FOR get_box%=1 TO 96
  127.   READ box_data%
  128.   LET box_str$=CHR$(box_data%)
  129.   LET cvr_box$=cvr_box$+box_str$
  130. NEXT get_box%
  131. '
  132. RESTORE eludb_data
  133. FOR get_eludb%=1 TO 18
  134.   READ elud_data%
  135.   LET eludbox$=eludbox$+CHR$(elud_data%)
  136. NEXT get_eludb%
  137. '
  138. boxdata:
  139. DATA 0,34,0,14,0,1
  140. DATA 255,255,255,255,224,0
  141. DATA 255,255,255,255,224,0
  142. DATA 255,255,255,255,224,0
  143. DATA 255,255,255,255,224,0
  144. DATA 255,255,255,255,224,0
  145. DATA 255,255,255,255,224,0
  146. DATA 255,255,255,255,224,0
  147. DATA 255,255,255,255,224,0
  148. DATA 255,255,255,255,224,0
  149. DATA 255,255,255,255,224,0
  150. DATA 255,255,255,255,224,0
  151. DATA 255,255,255,255,224,0
  152. DATA 255,255,255,255,224,0
  153. DATA 255,255,255,255,224,0
  154. DATA 255,255,255,255,224,0
  155. '
  156. eludb_data:
  157. DATA 0,5,0,5,0,1,255,255,255,254,255,109,254,105,254,117,255,50
  158. '
  159. mth:
  160. DATA Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Okt,Nov,Dec
  161. '
  162. ' -------------------------- IBM-Zeichensatz ----------------------------------
  163. '
  164. IF EXIST("omnibus2.ibm")
  165.   OPEN "I",#2,"omnibus2.ibm"
  166.   FOR ibm%=1 TO 49
  167.     INPUT #2,ansi$(ibm%)
  168.   NEXT ibm%
  169.   CLOSE #2
  170. ELSE !         .                    .                  .
  171.   LET fatal$=" | IBM character set  |  not found! "
  172.   ALERT 1,fatal$,1," Sh... ",dummy%
  173.   END
  174. ENDIF
  175. '
  176. x=FRE(0)
  177. '
  178. @conf_rs(std_baud%,std_hands%,std_ucr%)   ! Standard-Parameter einstellen
  179. PAUSE 5
  180. '
  181. @rsrc_load("omnibus2.rsc",*ret)           ! Resource-Datei einladen
  182. gag!=TRUE                                 ! Gag beim Formular
  183. clr!=TRUE                                 ! Cls beim Formular
  184. '
  185. ' *                                 Main                                      *
  186. '
  187. anfang:                                          ! * HAUPT-AUSWAHL * !
  188. @swap_scrn                                       ! Bildschirme vertauschen
  189. @rsrc_gaddr(0,0,*adresse%,*ret) !Main=0          ! Adresse der Dialogbox
  190. DPOKE (adresse%+10+capton*24),0                  ! Knoepfe zurueckstellen
  191. DPOKE (adresse%+10+captoff*24),0
  192. IF capton!=TRUE                                  ! Knoepfe fuer Capture
  193.   DPOKE (adresse%+10+23*24),1                    ! Capton=23
  194. ELSE
  195.   DPOKE (adresse%+10+24*24),1                    ! Captoff=24
  196. ENDIF
  197. @draw_form                                       ! Formular zeichnen
  198. ' ------------------------------------------------ Eintraege ins Formular -----
  199. DEFTEXT 1,0,0,6                                  ! Nach dem Zeichnen des
  200. TEXT 297,148,version$                            ! Formulars kann mit Text
  201. DEFTEXT 1,0,0,4
  202. IF wp_down!=TRUE
  203.   TEXT 359,175,"1stWord"
  204. ELSE
  205.   TEXT 360,175,"ASCII"
  206. ENDIF
  207. DEFTEXT 1,0,0,13                                 ! an gewuenschter Stelle
  208. TEXT 217,254,prg$                                ! reingeschrieben werden.
  209. TEXT 105,137,"RS232 and"
  210. TEXT 108,137+18,"terminal"
  211. TEXT 111,137+36,"setting"
  212. show_free$=STR$(cpt_alloc%-(count_capt%-capt%))  ! Freien Capt-Speicher
  213. TEXT 352-LEN(show_free$)*8,310,show_free$        ! anzeigen
  214. '
  215. IF logon!=TRUE
  216.   TEXT 508,310,"Open"
  217. ELSE
  218.   TEXT 500,310,"Closed"
  219. ENDIF
  220. ' -----------------------------------------------------------------------------
  221. @show_scrn                                      ! Verdeckten Bildschirm zeigen
  222. @mind_box                                       ! Formular durchfuehren
  223. '
  224. IF (DPEEK(adresse%+10+23*24) AND 1)=1           ! Capton=23 Capture on/off
  225.   capton!=TRUE
  226. ELSE
  227.   capton!=FALSE
  228. ENDIF
  229. '
  230. IF (DPEEK(adresse%+10+26*24) AND 1)=1           ! Freecapt=26 Capture leeren
  231.   DPOKE (adresse%+10+26*24),0
  232.   c_s%=100                                      ! Capture-Anzeige auf 100%
  233.   CLR c_ss%                                     ! Schritte-Zaehler auf 0
  234.   count_capt%=capt%                             ! Caption-Zaehler zurueck
  235.   GOTO anfang
  236. ENDIF
  237. '
  238. IF (DPEEK(adresse%+10+19*24) AND 1)=1           ! Aboutprg=19 Ueber omnibus2
  239.   DPOKE (adresse%+10+19*24),0
  240.   @swap_scrn
  241.   @rsrc_gaddr(0,5,*adresse%,*ret) !Eigenlob=5        ! Adresse der Dialogbox
  242.   @draw_form                                    ! Formular zeichnen
  243.   gag!=TRUE
  244.   @show_scrn
  245.   @mind_box                                     ! Formular durchfuehren
  246.   DPOKE (adresse%+10+16*24),0                   ! Oklob=16
  247.   clr!=TRUE
  248.   gag!=TRUE
  249.   down!=TRUE
  250.   GOTO anfang
  251. ENDIF
  252. '
  253. FOR i_main%=2 TO 15                             ! Restliche Knoepfe abfragen
  254.   IF (DPEEK(adresse%+10+i_main%*24) AND 1)=1    ! Knopf gedrueckt...
  255.     DPOKE (adresse%+10+i_main%*24),0            ! ...zurueckstellen
  256.     verteil%=i_main%-1                          ! Verteiler fuer On .. Gosub
  257.   ENDIF
  258. NEXT i_main%
  259. '
  260. ON verteil% GOSUB ft,at,pt,dp,dy,se,ne,ed,dr,si,en,dy,wl,hw
  261. '                 1  2  3  4  5  6  7  8  9  10 11 12 13 14
  262. GOTO anfang
  263. '
  264. PROCEDURE ft          ! F-Tasten
  265.   gag!=TRUE
  266.   @swap_scrn
  267.   @form_fkeys
  268.   clr!=TRUE
  269.   gag!=TRUE
  270.   down!=TRUE
  271. RETURN
  272. '
  273. PROCEDURE at          ! Alt-Tasten
  274. RETURN
  275. '
  276. PROCEDURE pt          ! Parameter und Terminal
  277.   @swap_scrn
  278.   gag!=TRUE
  279.   @form_paras
  280.   clr!=TRUE
  281.   gag!=TRUE
  282.   down!=TRUE
  283. RETURN
  284. '
  285. PROCEDURE dp         ! Datenpfad
  286.   DPOKE (adresse%+10+path*24),0
  287.   @swap_scrn
  288.   gag!=TRUE
  289.   @form_path
  290.   gag!=TRUE
  291.   down!=TRUE
  292. RETURN
  293. '
  294. PROCEDURE dy         ! Dummy-Prozedur bei nicht vorhandenem Knopf
  295. RETURN
  296. '
  297. PROCEDURE se         ! Editor bestimmen
  298.   @swap_scrn
  299.   gag!=TRUE
  300.   @form_setedit
  301.   gag!=TRUE
  302.   down!=TRUE
  303. RETURN
  304. '
  305. PROCEDURE ne         ! Nummerneingabe
  306.   @swap_scrn
  307.   gag!=TRUE
  308.   @form_dialdir
  309.   clr!=TRUE
  310.   down!=TRUE
  311.   gag!=TRUE
  312. RETURN
  313. '
  314. PROCEDURE ed         ! Texteditor
  315.   @exec_editor
  316.   IF wrote!
  317.     gag!=TRUE
  318.     down!=TRUE
  319.   ENDIF
  320. RETURN
  321. '
  322. PROCEDURE dr         ! Drucken
  323.   pr_test%=GEMDOS(&H11)                            ! Drucker-Test
  324.   IF pr_test%=-1                                   ! Drucker OK
  325.     @drucken
  326.   ELSE                                             ! Drucker nicht OK
  327.     @rsrc_gaddr(0,6,*adresse%,*ret) ! Printerr=6         ! Drucker-Fehler melden
  328.     @swap_scrn
  329.     @draw_form
  330.     down!=TRUE
  331.     gag!=TRUE
  332.     @show_scrn
  333.     @mind_box
  334.     DPOKE (adresse%+10+3*24),0 ! Preraha=3
  335.   ENDIF
  336. RETURN
  337. '
  338. PROCEDURE si         ! Sichern
  339.   @sichern
  340. RETURN
  341. '
  342. PROCEDURE en         ! Schluss:
  343.   IF logon!=TRUE
  344.     @rsrc_gaddr(0,21,*adresse%,*ret)
  345.     @draw_form
  346.     @mind_box
  347.     DPOKE (adresse%+10+3*24),0
  348.   ELSE
  349.     GEMSYS 111                      ! RSRC_FREE; RSC loeschen!
  350.     VOID GEMDOS(&H49,L:dat%)        ! Daten-Puffer freigeben
  351.     VOID GEMDOS(&H49,L:capt%)       ! Capture-Speicher freigeben
  352.     VOID GEMDOS(&H49,L:puff%)       ! Sende/SendANSI/Drucker-Puffer freigeben
  353.     VOID GEMDOS(&H49,L:log%)        ! Log-Puffer freigeben
  354.     VOID GEMDOS(&H49,L:mod%)        ! Modem-Sequenz-Puffer freigeben
  355.     VOID GEMDOS(&H49,L:seq%)        ! ANSI-Sequenz-Puffer freigeben
  356.     VOID GEMDOS(&H49,L:scrn%)       ! Bildschirm-Rettungs-Puffer Freigeben
  357.     RESERVE FRE(0)+shrink%-255      ! Gesamtspeicher freigeben
  358.     END                             ! ~~~Programmende~~~
  359.   ENDIF
  360. RETURN
  361. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Virtuelles Ende des Programms ~~~~~~~~~~~~~
  362. PROCEDURE wl            ! Waehlen
  363.   @swap_scrn
  364.   gag!=TRUE
  365.   @form_wahl
  366.   clr!=TRUE
  367.   gag!=TRUE
  368.   down!=TRUE
  369. RETURN
  370. '
  371. PROCEDURE hw           ! Handwahl
  372.   LET dummy$=""
  373.   handw!=TRUE
  374.   @terminal(dummy$)                              ! Terminal ohne Nummer
  375.   handw!=FALSE
  376.   clr!=TRUE
  377.   gag!=TRUE
  378.   down!=TRUE
  379. RETURN
  380. '
  381. PROCEDURE dimens
  382.   DIM fk_sende$(70)                       ! F-Taste Senden
  383.   DIM status_ein%(17)                     ! Wahl-Status in RSC
  384.   DIM status_wein%(17)                    ! Nummernfelder in Roster
  385.   DIM status_fk%(10)                      ! Stati der F-Tasten im F-Tasten-Roster
  386.   DIM senden$(30)                         ! Waehlen
  387.   DIM eintrag$(15),s_eintrag$(15)         ! Name/Nummer/Speed/Parameter/Terminal
  388.   DIM linset$(17)                         ! Einsatz mit Name und Nummer
  389.   DIM nknoepfe$(17)                       ! Formularknoepfe (Telefon-"Buch"
  390.   DIM nbauds$(17)                         ! Baud fuer Waehlen
  391.   DIM nucr$(17)                           ! Ucr fuer Waehlen
  392.   DIM ftaste$(10),s_ftaste$(10)           ! F-Tasten
  393.   DIM speed$(7)                           ! Fuer Std_speed$ und N_speed$
  394.   DIM bbaud$(7)
  395.   DIM ansi$(49)                           ! IBM-Zeichensatz
  396. RETURN
  397. '
  398. PROCEDURE get_std_var
  399.   std_term$="ANSI "
  400.   std_knopft%=6
  401.   std_speed$="1200"
  402.   std_knopf1%=6
  403.   std_bits$="8"
  404.   std_knopf2%=21
  405.   std_parity$="N"
  406.   std_knopf3%=14
  407.   std_stop$="1"
  408.   std_knopf4%=25
  409.   std_baud%=7
  410.   std_hands%=0
  411.   std_knopf5%=35
  412.   std_ucr%=136
  413.   wp_down!=FALSE
  414.   wp_up!=FALSE
  415.   lf!=FALSE
  416.   echo!=FALSE
  417.   s_pfad$=SPACE$(47)
  418.   pfad$="\*.*"
  419.   LSET s_pfad$=pfad$
  420.   s_prg$=SPACE$(12)
  421.   prg$="ME.TTP"
  422.   LSET s_prg$=prg$
  423.   maus!=FALSE
  424.   box!=TRUE
  425.   FOR tel%=1 TO 15
  426.     LET s_eintrag$(tel%)=SPACE$(72)
  427.     eintrag$(tel%)="Name"+SPACE$(23)+"Nummer"
  428.     LSET s_eintrag$(tel%)=eintrag$(tel%)
  429.     LET nknoepfe$(tel%)="0416111823"
  430.     LET nbauds$(tel%)="7"
  431.     LET nucr$(tel%)="136"
  432.   NEXT tel%
  433.   FOR fkey_dat%=1 TO 10
  434.     LET s_ftaste$(fkey_dat%)=SPACE$(67)
  435.     ftaste$(fkey_dat%)="Hallo..."
  436.     LSET s_ftaste$(fkey_dat%)=ftaste$(fkey_dat%)
  437.   NEXT fkey_dat%
  438.   ed_alloc%=3000  ! Mem fuer Prg$
  439. RETURN
  440. '
  441. PROCEDURE read_dat
  442.   BLOAD "omnibus2.bin",dat%
  443.   '
  444.   BMOVE dat%,VARPTR(std_term$),5
  445.   std_knopft=PEEK(dat%+5)
  446.   '
  447.   IF std_knopft=7      ! spaeter einordnen!!! *****************
  448.     vt100!=TRUE
  449.   ENDIF
  450.   '
  451.   BMOVE dat%+6,VARPTR(std_speed$),4
  452.   std_knopf1=PEEK(dat%+10)
  453.   std_bits$=CHR$(PEEK(dat%+11))
  454.   std_knopf2=PEEK(dat%+12)
  455.   std_parity$=CHR$(PEEK(dat%+13))
  456.   std_knopf3=PEEK(dat%+14)
  457.   std_stop$=CHR$(PEEK(dat%+15))
  458.   std_knopf4=PEEK(dat%+16)
  459.   std_baud%=PEEK(dat%+17)
  460.   std_hands%=PEEK(dat%+18)
  461.   std_knopf5=PEEK(dat%+19)
  462.   std_ucr%=PEEK(dat%+20)
  463.   IF PEEK(dat%+21)=0
  464.     wp_down!=FALSE
  465.   ELSE
  466.     wp_down!=TRUE
  467.   ENDIF
  468.   IF PEEK(dat%+22)=0
  469.     wp_up!=FALSE
  470.   ELSE
  471.     wp_up!=TRUE
  472.   ENDIF
  473.   IF PEEK(dat%+23)=0
  474.     lf!=FALSE
  475.   ELSE
  476.     lf!=TRUE
  477.   ENDIF
  478.   IF PEEK(dat%+24)=0
  479.     echo!=FALSE
  480.   ELSE
  481.     echo!=TRUE
  482.   ENDIF
  483.   CLR cl_pth%,pfad$
  484.   WHILE PEEK(dat%+25+cl_pth%)<>32
  485.     pfad$=pfad$+CHR$(PEEK(dat%+25+cl_pth%))
  486.     INC cl_pth%
  487.     EXIT IF cl_pth%=47
  488.   WEND
  489.   CLR cl_prg%,prg$
  490.   WHILE PEEK(dat%+72+cl_prg%)<>32
  491.     prg$=prg$+CHR$(PEEK(dat%+72+cl_prg%))
  492.     INC cl_prg%
  493.     EXIT IF cl_prg%=12
  494.   WEND
  495.   IF PEEK(dat%+84)=0
  496.     maus!=FALSE
  497.   ELSE
  498.     maus!=TRUE
  499.   ENDIF
  500.   IF PEEK(dat%+85)=0
  501.     box!=FALSE
  502.   ELSE
  503.     box!=TRUE
  504.   ENDIF
  505.   idat%=86
  506.   FOR i%=1 TO 15
  507.     BMOVE dat%+idat%,VARPTR(s_eintrag$(i%)),72
  508.     eintrag$(i%)=s_eintrag$(i%)
  509.     ADD idat%,72
  510.     BMOVE dat%+idat%,VARPTR(nknoepfe$(i%)),10
  511.     ADD idat%,10
  512.     nbauds$(i%)=CHR$(PEEK(dat%+idat%))
  513.     INC idat%
  514.     BMOVE dat%+idat%,VARPTR(nucr$(i%)),3
  515.     ADD idat%,3
  516.   NEXT i%
  517.   FOR i%=1 TO 10
  518.     BMOVE dat%+idat%,VARPTR(s_ftaste$(i%)),67
  519.     ftaste$(i%)=s_ftaste$(i%)
  520.     '
  521.     el_32%=LEN(ftaste$(i%))                     ! Eliminate Spaces
  522.     WHILE ASC(MID$(ftaste$(i%),el_32%,1))=32
  523.       DEC el_32%
  524.     WEND
  525.     ftaste$(i%)=LEFT$(ftaste$(i%),el_32%)
  526.     '
  527.     ADD idat%,67
  528.   NEXT i%
  529.   ed_alloc%=DPEEK(dat%+idat%)
  530. RETURN
  531. '
  532. PROCEDURE write_dat
  533.   BMOVE VARPTR(std_term$),dat%,5
  534.   POKE dat%+5,std_knopft
  535.   BMOVE VARPTR(std_speed$),dat%+6,4
  536.   POKE dat%+10,std_knopf1
  537.   POKE dat%+11,ASC(std_bits$)
  538.   POKE dat%+12,std_knopf2
  539.   POKE dat%+13,ASC(std_parity$)
  540.   POKE dat%+14,std_knopf3
  541.   POKE dat%+15,ASC(std_stop$)
  542.   POKE dat%+16,std_knopf4
  543.   POKE dat%+17,std_baud%
  544.   POKE dat%+18,std_hands%
  545.   POKE dat%+19,std_knopf5
  546.   POKE dat%+20,std_ucr%
  547.   POKE dat%+21,wp_down!
  548.   POKE dat%+22,wp_up!
  549.   POKE dat%+23,lf!
  550.   POKE dat%+24,echo!
  551.   '
  552.   LSET s_pfad$=pfad$
  553.   BMOVE VARPTR(s_pfad$),dat%+25,47
  554.   '
  555.   LSET s_prg$=prg$
  556.   BMOVE VARPTR(s_prg$),dat%+72,12
  557.   POKE dat%+84,maus!
  558.   POKE dat%+85,box!
  559.   '
  560.   idat%=86
  561.   FOR i%=1 TO 15
  562.     LSET s_eintrag$(i%)=eintrag$(i%)
  563.     BMOVE VARPTR(s_eintrag$(i%)),dat%+idat%,72
  564.     ADD idat%,72
  565.     BMOVE VARPTR(nknoepfe$(i%)),dat%+idat%,10
  566.     ADD idat%,10
  567.     POKE dat%+idat%,ASC(nbauds$(i%))
  568.     INC idat%
  569.     BMOVE VARPTR(nucr$(i%)),dat%+idat%,3
  570.     ADD idat%,3
  571.   NEXT i%
  572.   '
  573.   FOR i%=1 TO 10
  574.     LSET s_ftaste$(i%)=ftaste$(i%)
  575.     BMOVE VARPTR(s_ftaste$(i%)),dat%+idat%,67
  576.     ADD idat%,67
  577.   NEXT i%
  578.   '
  579.   DPOKE dat%+idat%,ed_alloc%
  580.   '
  581.   BSAVE "omnibus2.bin",dat%,2048
  582. RETURN
  583. '
  584. PROCEDURE form_path
  585.   @rsrc_gaddr(0,10,*adresse%,*ret) ! Defpath=10
  586.   @draw_form
  587.   @show_scrn
  588.   PRINT AT(17,16);
  589.   FORM INPUT 47 AS pfad$
  590.   '            .              .               .
  591.   LET frage$=" |  Save        |  path?        "
  592.   ALERT 2,frage$,1," Yes | No ",choice2%
  593.   IF choice2%=1
  594.     @rsrc_gaddr(0,15,*adresse%,*ret)
  595.     @draw_form
  596.     @write_dat
  597.   ENDIF
  598. RETURN
  599. '
  600. PROCEDURE form_paras
  601.   LOCAL era%,wrt%
  602.   pt_anfang:                              ! (Beginn Parameter-Formular)
  603.   @rsrc_gaddr(0,1,*adresse%,*ret) !Paras  ! Adresse der Dialogbox
  604.   '
  605.   IF NOT from_term!                       ! Wenn nicht vom Terminal-Formular
  606.     FOR era%=4 TO 9                       ! Saemtliche Knoepfe loeschen:
  607.       DPOKE (adresse%+10+era%*24),0
  608.     NEXT era%
  609.     FOR era%=13 TO 15
  610.       DPOKE (adresse%+10+era%*24),0
  611.     NEXT era%
  612.     FOR era%=19 TO 21
  613.       DPOKE (adresse%+10+era%*24),0
  614.     NEXT era%
  615.     FOR era%=25 TO 26
  616.       DPOKE (adresse%+10+era%*24),0
  617.     NEXT era%
  618.     FOR era%=30 TO 31
  619.       DPOKE (adresse%+10+era%*24),0
  620.     NEXT era%
  621.     FOR era%=35 TO 37
  622.       DPOKE (adresse%+10+era%*24),0
  623.     NEXT era%
  624.     FOR era%=39 TO 40
  625.       DPOKE (adresse%+10+era%*24),0
  626.     NEXT era%
  627.     FOR era%=49 TO 50
  628.       DPOKE (adresse%+10+era%*24),0
  629.     NEXT era%
  630.     '
  631.     ' ------------ Knoepfe entsprechend Std_Parameter faerben: --------------
  632.     '
  633.     DPOKE (adresse%+10+std_knopf1*24),1       ! Speed
  634.     DPOKE (adresse%+10+std_knopf2*24),1       ! Bits
  635.     DPOKE (adresse%+10+std_knopf3*24),1       ! Parity
  636.     DPOKE (adresse%+10+std_knopf4*24),1       ! Stop-Bits
  637.     DPOKE (adresse%+10+std_knopf5*24),1       ! Handshake
  638.     '
  639.     IF echo!=TRUE                             ! Local echo...
  640.       DPOKE (adresse%+10+30*24),1
  641.     ELSE
  642.       DPOKE (adresse%+10+31*24),1
  643.     ENDIF
  644.     '
  645.     IF lf!=TRUE                               ! Add LF upon CR
  646.       DPOKE (adresse%+10+39*24),1
  647.     ELSE
  648.       DPOKE (adresse%+10+40*24),1
  649.     ENDIF
  650.     '
  651.     IF wp_up!=TRUE                            ! WordPlus...
  652.       DPOKE (adresse%+10+49*24),1
  653.     ELSE
  654.       DPOKE (adresse%+10+49*24),0
  655.     ENDIF
  656.     IF wp_down!=TRUE
  657.       DPOKE (adresse%+10+50*24),1
  658.     ELSE
  659.       DPOKE (adresse%+10+50*24),0
  660.     ENDIF
  661.     ' -----------------------------------------------------------------------
  662.   ENDIF
  663.   '
  664.   from_term!=FALSE                            ! Flag zurueckstellen
  665.   '
  666.   @draw_form                                  ! Formular zeichnen
  667.   @show_scrn
  668.   @mind_box                                   ! Formular durchfuehren
  669.   '
  670.   IF (DPEEK(adresse%+10+51*24) AND 1)=1       ! Toterm=51 Terminal-Formular aufrufen
  671.     DPOKE (adresse%+10+51*24),0
  672.     IF NOT from_alt
  673.       @swap_scrn
  674.       gag!=TRUE
  675.     ENDIF
  676.     @form_term
  677.     gag!=TRUE
  678.     down!=TRUE
  679.     @swap_scrn
  680.     GOTO pt_anfang                            ! Zurueck zum Parameter-Formular
  681.   ENDIF
  682.   '
  683.   IF (DPEEK(adresse%+10+45*24) AND 1)=1       ! Forgetft=45 Abbruch
  684.     DPOKE (adresse%+10+45*24),0
  685.     GOTO vergiss_para
  686.   ENDIF
  687.   '
  688.   IF (DPEEK(adresse%+10+53*24) AND 1)=1       ! Okft=53 OK
  689.     DPOKE (adresse%+10+53*24),0
  690.     '
  691.     ' ----------------------------------------! Parameter einrichten:
  692.     '
  693.     FOR wrt%=4 TO 9 ! qqqq
  694.       IF (DPEEK(adresse%+10+wrt%*24) AND 1)=1
  695.         std_speed$=speed$(wrt%-3)             !300/600/1200/2400/4800/9600
  696.         std_baud%=VAL(bbaud$(wrt%-3))
  697.         std_knopf1=wrt%
  698.       ENDIF
  699.     NEXT wrt%
  700.     '
  701.     IF (DPEEK(adresse%+10+19*24) AND 1)=1 !6 Bit
  702.       LET std_bits$="6"
  703.       LET sbit6%=64
  704.       LET sbit5%=0
  705.       LET std_knopf2=19
  706.     ENDIF
  707.     IF (DPEEK(adresse%+10+20*24) AND 1)=1 !7 Bit
  708.       LET std_bits$="7"
  709.       LET sbit6%=0
  710.       LET sbit5%=32
  711.       LET std_knopf2=20
  712.     ENDIF
  713.     IF (DPEEK(adresse%+10+21*24) AND 1)=1 !8 Bit
  714.       LET std_bits$="8"
  715.       LET sbit6%=0
  716.       LET sbit5%=0
  717.       LET std_knopf2=21
  718.     ENDIF
  719.     IF (DPEEK(adresse%+10+13*24) AND 1)=1  !Even
  720.       LET std_parity$="E"
  721.       LET sbit2%=4
  722.       LET sbit1%=2
  723.       LET std_knopf3=13
  724.     ENDIF
  725.     IF (DPEEK(adresse%+10+14*24) AND 1)=1  !None
  726.       LET std_parity$="N"
  727.       LET sbit2%=0
  728.       LET sbit1%=0
  729.       LET std_knopf3=14
  730.     ENDIF
  731.     IF (DPEEK(adresse%+10+15*24) AND 1)=1  !Odd
  732.       LET std_parity$="O"
  733.       LET sbit2%=4
  734.       LET sbit1%=0
  735.       LET std_knopf3=15
  736.     ENDIF
  737.     IF (DPEEK(adresse%+10+25*24) AND 1)=1 !1 Stop
  738.       LET std_stop$="1"
  739.       LET sbit4%=0
  740.       LET sbit3%=8
  741.       LET std_knopf4=25
  742.     ENDIF
  743.     IF (DPEEK(adresse%+10+26*24) AND 1)=1 !2 Stop
  744.       LET std_stop$="2"
  745.       LET sbit4%=16
  746.       LET sbit3%=8
  747.       LET std_knopf4=26
  748.     ENDIF
  749.     IF (DPEEK(adresse%+10+30*24) AND 1)=1 !Local echo on
  750.       echo!=TRUE
  751.     ENDIF
  752.     IF (DPEEK(adresse%+10+31*24) AND 1)=1 !Local echo off
  753.       echo!=FALSE
  754.     ENDIF
  755.     '
  756.     FOR wrt%=35 TO 37
  757.       IF (DPEEK(adresse%+10+wrt%*24) AND 1)=1
  758.         std_hands%=wrt%-35                !No handshake/Xon-Xoff/RTS-CTS
  759.         std_knopf5=wrt%
  760.       ENDIF
  761.     NEXT wrt%
  762.     '
  763.     IF (DPEEK(adresse%+10+39*24) AND 1)=1 !Add LF
  764.       lf!=TRUE
  765.     ENDIF
  766.     IF (DPEEK(adresse%+10+40*24) AND 1)=1 !Do not add LF
  767.       lf!=FALSE
  768.     ENDIF
  769.     IF (DPEEK(adresse%+10+49*24) AND 1)=1 !WordPlus beim Upload
  770.       wp_up!=TRUE
  771.     ELSE
  772.       wp_up!=FALSE
  773.     ENDIF
  774.     IF (DPEEK(adresse%+10+50*24) AND 1)=1 !WordPlus beim Download
  775.       wp_down!=TRUE
  776.     ELSE
  777.       wp_down!=FALSE
  778.     ENDIF
  779.     '
  780.     ' -------------------------------------------------! Parameter definiert
  781.     LET sbit7%=128                                     ! Bit 7 immer gesetzt
  782.     LET std_ucr%=sbit7%+sbit6%+sbit5%+sbit4%+sbit3%+sbit2%+sbit1% ! std_ucr%
  783.     @conf_rs(std_baud%,std_hands%,std_ucr%)            ! An rsconf uebergeben
  784.     PAUSE 5
  785.     '            .                          .                        .
  786.     LET frage$=" | Save RS232 and           | terminal settings?     "
  787.     ALERT 2,frage$,1," Yes | No  ",choice1%
  788.     '                .    .      .
  789.     IF choice1%=1
  790.       '
  791.       @rsrc_gaddr(0,15,*adresse%,*ret)             ! Moment...
  792.       @draw_form
  793.       @write_dat ! sichere...
  794.       '
  795.     ENDIF
  796.     '
  797.   ENDIF                                                ! Ende Formular
  798.   ' ---------------------------------------------------------------------------
  799.   vergiss_para:
  800. RETURN
  801. '
  802. PROCEDURE form_term
  803.   @rsrc_gaddr(0,2,*adresse%,*ret) ! Terminal=2      ! Adresse der Dialogbox
  804.   '
  805.   FOR era=4 TO 7                              ! Alle Knoepfe loeschen
  806.     DPOKE (adresse%+10+era*24),0
  807.   NEXT era
  808.   '
  809.   DPOKE (adresse%+10+std_knopft*24),1         ! Std-Knopf einfaerben
  810.   '
  811.   @draw_form                                  ! Formular zeichnen
  812.   @show_scrn
  813.   @mind_box                                   ! Formular durchfuehren
  814.   '
  815.   IF (DPEEK(adresse%+10+8*24) AND 1)=1        ! Forgettr=8 Abbruch
  816.     DPOKE (adresse%+10+8*24),0
  817.     GOTO vergiss_tr
  818.   ENDIF
  819.   '
  820.   IF (DPEEK(adresse%+10+10*24) AND 1)=1       ! Oktr=10 OK
  821.     DPOKE (adresse%+10+10*24),0
  822.     ' ----------------------------------------! Terminal einrichten:
  823.     IF (DPEEK(adresse%+10+4*24) AND 1)=1
  824.       LET std_term$=CHR$(14)+CHR$(15)+"   "
  825.       LET std_knopft=4
  826.       vt100!=FALSE
  827.     ENDIF
  828.     IF (DPEEK(adresse%+10+5*24) AND 1)=1
  829.       LET std_term$="IBM  "
  830.       LET std_knopft=5
  831.       vt100!=FALSE
  832.     ENDIF
  833.     IF (DPEEK(adresse%+10+6*24) AND 1)=1
  834.       LET std_term$="ANSI "
  835.       LET std_knopft=6
  836.       vt100!=FALSE
  837.     ENDIF
  838.     IF (DPEEK(adresse%+10+7*24) AND 1)=1
  839.       LET std_term$="VT100"
  840.       LET std_knopft=7
  841.       vt100!=TRUE
  842.     ENDIF
  843.     ' ----------------------------------------
  844.   ENDIF                                      ! Ende Terminal-Formular
  845.   ' ---------------------------------------------------------------------------
  846.   vergiss_tr:
  847.   from_term!=TRUE
  848.   @swap_scrn
  849. RETURN
  850. '
  851. PROCEDURE form_wahl
  852.   @rsrc_gaddr(0,4,*adresse%,*ret) ! Dialing=4
  853.   @draw_form
  854.   @show_scrn
  855.   '
  856.   FOR zeigenr%=1 TO 15                             ! Gespeicherte Eintraege
  857.     TEXT 22,(zeigenr%*21)+56,eintrag$(zeigenr%)    ! in den Roster
  858.   NEXT zeigenr%                                    ! schreiben
  859.   '
  860.   @mind_box
  861.   '
  862.   FOR steinw%=1 TO 15                              ! Stati der Roster-Felder
  863.     status_wein%(steinw%)=DPEEK(adresse%+10+steinw%*24)
  864.   NEXT steinw%
  865.   '
  866.   IF (DPEEK(adresse%+10+16*24) AND 1)=1            ! Abbrechen (Nonummer=16)
  867.     DPOKE (adresse%+10+16*24),0                    ! Abbruch-Knopf zurueck
  868.     GOTO verg_wahl
  869.   ENDIF
  870.   '
  871.   FOR stausw%=1 TO 15                              ! Stati (1) bis (15)...
  872.     IF (status_wein%(stausw%) AND 1)=1
  873.       DPOKE (adresse%+10+stausw%*24),0             ! "Knoepfe" zurueck...
  874.       LET rost_nr%=stausw%                         ! Feldnummer von oben
  875.     ENDIF
  876.   NEXT stausw%
  877.   '
  878.   ' --- Parameter fuer Top-Leiste und Conf_rs aus Roster-Eintrag filtern: ---
  879.   '
  880.   IF MID$(eintrag$(rost_nr%),64,1)=CHR$(32)     ! Wenn Terminal leer
  881.     LET n_term$=std_term$                       ! Standard-Terminal nehmen
  882.   ELSE                                          ! andernfalls
  883.     LET n_term$=MID$(eintrag$(rost_nr%),64,8)   ! Terminal aus Eintrag nehmen
  884.   ENDIF
  885.   IF MID$(eintrag$(rost_nr%),55,4)="    "       ! Wenn Speed leer
  886.     LET n_speed$=std_speed$                     ! Standard-Speed nehmen
  887.   ELSE                                          ! andernfalls
  888.     LET n_speed$=MID$(eintrag$(rost_nr%),55,4)  ! Speed aus Eintrag nehmen
  889.   ENDIF
  890.   LET n_bits$=MID$(eintrag$(rost_nr%),60,1)     ! Datenbits aus Eintrag
  891.   LET n_parity$=MID$(eintrag$(rost_nr%),61,1)   ! Parity aus Eintrag
  892.   LET n_stop$=MID$(eintrag$(rost_nr%),62,1)     ! Stopbits aus Eintrag
  893.   LET n_log$=std_log$                           ! Standard-Log
  894.   '
  895.   ' -------- Speed und Parameter fuer Einstellung aus .tel-Datei: -------------
  896.   '
  897.   IF nbauds$(rost_nr%)="#"
  898.     LET n_baud%=std_baud%
  899.   ELSE
  900.     LET n_baud%=VAL(nbauds$(rost_nr%))
  901.   ENDIF
  902.   '
  903.   LET n_ucr%=VAL(nucr$(rost_nr%))
  904.   '
  905.   ' --------------------- Speed und Parameter einstellen: ---------------------
  906.   '
  907.   @conf_rs(n_baud%,std_hands,n_ucr%)
  908.   PAUSE 5
  909.   '
  910.   ' Terminal einstellen *****************************
  911.   '
  912.   ' ------- Name fuer Show_action in Top-Line aus Eintrag filtern: ------------
  913.   '
  914.   LET gname$=""
  915.   LET wahl_name$=""
  916.   LET gname$=MID$(eintrag$(rost_nr%),1,26)
  917.   count_32%=1
  918.   FOR demask%=LEN(gname$) DOWNTO 1
  919.     EXIT IF MID$(gname$,demask%,1)<>CHR$(32)
  920.     INC count_32%
  921.   NEXT demask%
  922.   FOR demask%=1 TO LEN(gname$)-count_32%+1
  923.     LET wahl_name$=wahl_name$+MID$(gname$,demask%,1)
  924.   NEXT demask%
  925.   '
  926.   ' ------------ Nummer aus Roster-Eintrag filtern: ---------------------------
  927.   '
  928.   LET gwahl$=""
  929.   LET wahl$=""
  930.   LET gwahl$=MID$(eintrag$(rost_nr%),27,26)
  931.   FOR demask%=1 TO LEN(gwahl$)
  932.     IF MID$(gwahl$,demask%,1)>CHR$(47) AND MID$(gwahl$,demask%,1)<CHR$(58)
  933.       LET wahl$=wahl$+MID$(gwahl$,demask%,1)
  934.     ENDIF
  935.   NEXT demask%
  936.   @terminal(wahl$)
  937.   '
  938.   ' ---------------------------------------------------------------------------
  939.   '
  940.   verg_wahl:
  941. RETURN
  942. '
  943. PROCEDURE form_dialdir
  944.   LOCAL era%,wrt%
  945.   eingabe:                                         ! Label wenn nicht Abbruch
  946.   @rsrc_gaddr(0,9,*adresse%,*ret)                  ! Dialrost=9
  947.   @draw_form
  948.   @show_scrn
  949.   '
  950.   FOR zeige%=1 TO 15                               ! Gespeicherte Eintraege
  951.     TEXT 22,(zeige%*21)+56,eintrag$(zeige%)        ! in den Roster
  952.   NEXT zeige%                                      ! schreiben
  953.   '
  954.   @mind_box
  955.   '
  956.   FOR stein%=1 TO 15                               ! Stati der Roster-Felder
  957.     status_ein%(stein%)=DPEEK(adresse%+10+stein%*24)
  958.   NEXT stein%
  959.   '
  960.   IF (DPEEK(adresse%+10+16*24) AND 1)=1            ! Abbrechen (Einabbr=16)
  961.     DPOKE (adresse%+10+16*24),0                    ! Abbruch-Knopf zurueck
  962.     GOTO verg_ein
  963.   ENDIF
  964.   '
  965.   IF (DPEEK(adresse%+10+18*24) AND 1)=1            ! Sichern (Einsave=18)
  966.     DPOKE (adresse%+10+18*24),0                    ! Sichern-Knopf zurueck
  967.     @rsrc_gaddr(0,15,*adresse%,*ret)
  968.     @draw_form
  969.     @write_dat
  970.     GOTO verg_ein
  971.   ENDIF
  972.   '         +---------------------------------------------------+
  973.   '         | Wenn nicht Abbruch oder Speichern gewaehlt wurde: |
  974.   '         +---------------------------------------------------+
  975.   FOR staus%=1 TO 15                               ! Stati (1) bis (15)...
  976.     IF (status_ein%(staus%) AND 1)=1
  977.       DPOKE (adresse%+10+staus%*24),0              ! "Knoepfe" zurueck...
  978.       LET feld_nr%=staus%                          ! Feldnummer von oben
  979.       LET txt_y%=(feld_nr%*21)+56                  ! Hier texten (s. Wahl)
  980.     ENDIF
  981.   NEXT staus%
  982.   '      +---------------------------------------------------------+
  983.   '      | Name$ und Nummer$ aus Feldeintrag filtern und reinigen: |
  984.   '      +---------------------------------------------------------+
  985.   LET name$=""
  986.   LET nummer$=""
  987.   '
  988.   LET fulname$=MID$(eintrag$(feld_nr%),1,26)  ! Name ist mit chr$(32) = 26 lang
  989.   count_32%=1
  990.   FOR clean32%=LEN(fulname$) DOWNTO 1
  991.     EXIT IF MID$(fulname$,clean32%,1)<>CHR$(32) ! Leerzeichen zaehlen
  992.     INC count_32%
  993.   NEXT clean32%
  994.   FOR clean32%=1 TO LEN(fulname$)-count_32%+1
  995.     LET name$=name$+MID$(fulname$,clean32%,1)   ! Leerzeichen eliminieren
  996.   NEXT clean32%
  997.   '
  998.   LET fulnum$=MID$(eintrag$(feld_nr%),28,26)! Nummer ist mit chr$(32) = 26 lang
  999.   count_32%=1
  1000.   FOR clean32%=LEN(fulnum$) DOWNTO 1
  1001.     EXIT IF MID$(fulnum$,clean32%,1)<>CHR$(32) ! Leerzeichen zaehlen
  1002.     INC count_32%
  1003.   NEXT clean32%
  1004.   FOR clean32%=1 TO LEN(fulnum$)-count_32%+1
  1005.     LET nummer$=nummer$+MID$(fulnum$,clean32%,1)   ! Leerzeichen eliminieren
  1006.   NEXT clean32%
  1007.   '                        +-------------------+
  1008.   '                        | Eingabe-Formulare |
  1009.   '                        +-------------------+
  1010.   @scrn_save
  1011.   @rsrc_gaddr(0,12,*adresse%,*ret) ! Naminput=12      ! Formular Namen
  1012.   @swap_scrn
  1013.   @draw_form
  1014.   gag!=TRUE
  1015.   @show_scrn
  1016.   '
  1017.   PRINT AT(27,16);
  1018.   FORM INPUT 26 AS name$
  1019.   '
  1020.   @rsrc_gaddr(0,13,*adresse%,*ret) ! Numinput=13     ! Formular Nummern
  1021.   @swap_scrn
  1022.   @draw_form
  1023.   @show_scrn
  1024.   '
  1025.   PRINT AT(27,16);
  1026.   FORM INPUT 26 AS nummer$
  1027.   '
  1028.   par_anfang:
  1029.   @rsrc_gaddr(0,3,*adresse%,*ret) !Telinpar=3      ! Formular Parametereingabe
  1030.   @swap_scrn
  1031.   FOR era%=2 TO 8                                  ! Alle Knoepfe loeschen
  1032.     DPOKE (adresse%+10+era%*24),0
  1033.   NEXT era%
  1034.   FOR era%=10 TO 12
  1035.     DPOKE (adresse%+10+era%*24),0
  1036.   NEXT era%
  1037.   FOR era%=14 TO 16
  1038.     DPOKE (adresse%+10+era%*24),0
  1039.   NEXT era%
  1040.   FOR era%=18 TO 19
  1041.     DPOKE (adresse%+10+era%*24),0
  1042.   NEXT era%
  1043.   FOR era%=21 TO 25
  1044.     DPOKE (adresse%+10+era%*24),0
  1045.   NEXT era%
  1046.   '
  1047.   LET s_knopf1=VAL(MID$(nknoepfe$(feld_nr%),1,2))  ! Knoepfe aus .tel-Datei
  1048.   LET s_knopf2=VAL(MID$(nknoepfe$(feld_nr%),3,2))
  1049.   LET s_knopf3=VAL(MID$(nknoepfe$(feld_nr%),5,2))
  1050.   LET s_knopf4=VAL(MID$(nknoepfe$(feld_nr%),7,2))
  1051.   LET s_knopf6=VAL(MID$(nknoepfe$(feld_nr%),9,2))
  1052.   '
  1053.   DPOKE (adresse%+10+s_knopf1*24),1                ! Knoepfe setzen
  1054.   DPOKE (adresse%+10+s_knopf2*24),1
  1055.   DPOKE (adresse%+10+s_knopf3*24),1
  1056.   DPOKE (adresse%+10+s_knopf4*24),1
  1057.   DPOKE (adresse%+10+s_knopf6*24),1
  1058.   '
  1059.   @draw_form
  1060.   gag!=TRUE
  1061.   @show_scrn
  1062.   @mind_box
  1063.   '
  1064.   IF (DPEEK(adresse%+10+26*24) AND 1)=1       ! Abbruch (Abbreing=26)
  1065.     DPOKE (adresse%+10+26*24),0               ! Knopf zurueckstellen
  1066.     GOTO verg_ein
  1067.   ENDIF
  1068.   '
  1069.   IF (DPEEK(adresse%+10+33*24) AND 1)=1       ! OK (Okeing=33)
  1070.     DPOKE (adresse%+10+33*24),0               ! Knopf zurueck und...
  1071.   ENDIF
  1072.   '                                             ...Parameter auslesen:
  1073.   FOR wrt%=2 TO 8                             ! Speeds
  1074.     IF (DPEEK(adresse%+10+wrt%*24) AND 1)=1
  1075.       nspeed$=speed$(wrt%-1)
  1076.       nbaud$=bbaud$(wrt%-1)
  1077.       nknopf$="0"+STR$(wrt%)
  1078.     ENDIF
  1079.   NEXT wrt%
  1080.   '
  1081.   IF (DPEEK(adresse%+10+14*24) AND 1)=1  !6
  1082.     LET nbits$="6"
  1083.     LET nbit6%=64
  1084.     LET nbit5%=0
  1085.     LET nknopf2$="14"
  1086.   ENDIF
  1087.   IF (DPEEK(adresse%+10+15*24) AND 1)=1  !7
  1088.     LET nbits$="7"
  1089.     LET nbit6%=0
  1090.     LET nbit5%=32
  1091.     LET nknopf2$="15"
  1092.   ENDIF
  1093.   IF (DPEEK(adresse%+10+16*24) AND 1)=1 !8
  1094.     LET nbits$="8"
  1095.     LET nbit6%=0
  1096.     LET nbit5%=0
  1097.     LET nknopf2$="16"
  1098.   ENDIF
  1099.   IF (DPEEK(adresse%+10+10*24) AND 1)=1 !Even
  1100.     LET nparity$="E"
  1101.     LET nbit2%=4
  1102.     LET nbit1%=2
  1103.     LET nknopf3$="10"
  1104.   ENDIF
  1105.   IF (DPEEK(adresse%+10+11*24) AND 1)=1 !None
  1106.     LET nparity$="N"
  1107.     LET nbit2%=0
  1108.     LET nbit1%=0
  1109.     LET nknopf3$="11"
  1110.   ENDIF
  1111.   IF (DPEEK(adresse%+10+12*24) AND 1)=1 !Odd
  1112.     LET nparity$="O"
  1113.     LET nbit2%=4
  1114.     LET nbit1%=0
  1115.     LET nknopf3$="12"
  1116.   ENDIF
  1117.   IF (DPEEK(adresse%+10+18*24) AND 1)=1 !1
  1118.     LET nstop$="1"
  1119.     LET nbit4%=0
  1120.     LET nbit3%=8
  1121.     LET nknopf4$="18"
  1122.   ENDIF
  1123.   IF (DPEEK(adresse%+10+19*24) AND 1)=1 !2
  1124.     LET nstop$="2"
  1125.     LET nbit4%=16
  1126.     LET nbit3%=8
  1127.     LET nknopf4$="19"
  1128.   ENDIF
  1129.   IF (DPEEK(adresse%+10+21*24) AND 1)=1 !Atari-TT
  1130.     LET nterm$=CHR$(14)+CHR$(15)+"   "
  1131.     LET nknopf6$="21"
  1132.   ENDIF
  1133.   IF (DPEEK(adresse%+10+22*24) AND 1)=1 !IBM-TT
  1134.     LET nterm$="IBM  "
  1135.     LET nknopf6$="22"
  1136.   ENDIF
  1137.   IF (DPEEK(adresse%+10+23*24) AND 1)=1 !Ansi
  1138.     LET nterm$="ANSI "
  1139.     LET nknopf6$="23"
  1140.   ENDIF
  1141.   IF (DPEEK(adresse%+10+24*24) AND 1)=1 !VT100
  1142.     LET nterm$="VT100"
  1143.     LET nknopf6$="24"
  1144.   ENDIF
  1145.   IF (DPEEK(adresse%+10+25*24) AND 1)=1 !No terminal
  1146.     LET nterm$="        "
  1147.     LET nknopf6$="25"
  1148.   ENDIF
  1149.   '                    +----------------------------+
  1150.   '                    | Eintrag$() zusammenstellen |
  1151.   '                    +----------------------------+
  1152.   LET eintrag$(feld_nr%)=SPACE$(72)
  1153.   LET linset$(feld_nr%)=name$+SPACE$(27-LEN(name$))+nummer$+SPACE$(27-LEN(nummer$))+nspeed$+" "+nbits$+nparity$+nstop$+" "+nterm$
  1154.   LSET eintrag$(feld_nr%)=linset$(feld_nr%)
  1155.   '                    +----------------------------+
  1156.   '                    | Nknoepfe$() zusammenstelln |
  1157.   '                    +----------------------------+
  1158.   LET nknoepfe$(feld_nr%)=nknopf1$+nknopf2$+nknopf3$+nknopf4$+nknopf6$
  1159.   '                        +---------------------+
  1160.   '                        | Nbauds$() erstellen |
  1161.   '                        +---------------------+
  1162.   LET nbauds$(feld_nr%)=nbaud$
  1163.   '                      +-------------------------+
  1164.   '                      | Nucr$() zusammenstellen |
  1165.   '                      +-------------------------+
  1166.   LET nbit7%=128
  1167.   LET nucr%=nbit7%+nbit6%+nbit5%+nbit4%+nbit3%+nbit2%+nbit1%
  1168.   LET nucr$(feld_nr%)=STR$(nucr%)
  1169.   '
  1170.   @swap_scrn
  1171.   gag!=TRUE
  1172.   GOTO eingabe
  1173.   '
  1174.   verg_ein:                                       ! Eingabe abgebrochen
  1175. RETURN
  1176. '
  1177. PROCEDURE exec_editor
  1178.   IF box!=TRUE
  1179.     @fselbox("","Editor",FALSE)
  1180.     IF fs_frgt!
  1181.     ELSE
  1182.       LET treatfile$="*"+treatfile$               ! * = Dummy
  1183.       @rsrc_gaddr(0,15,*adresse%,*ret)            ! Moment
  1184.       @draw_form
  1185.       IF maus!=FALSE
  1186.         HIDEM
  1187.       ENDIF
  1188.       EXEC 0,prg$,treatfile$,""
  1189.       wrote!=TRUE
  1190.       IF from_alt!=FALSE
  1191.         VOID XBIOS(&H15,0)
  1192.       ENDIF
  1193.       SHOWM
  1194.     ENDIF
  1195.   ELSE
  1196.     @rsrc_gaddr(0,15,*adresse%,*ret)
  1197.     @draw_form
  1198.     IF maus!=FALSE
  1199.       HIDEM
  1200.     ENDIF
  1201.     EXEC 0,prg$,"",""
  1202.     wrote!=TRUE
  1203.     IF from_alt!=FALSE
  1204.       VOID xbiox(&H15,0)
  1205.     ENDIF
  1206.     SHOWM
  1207.   ENDIF
  1208. RETURN
  1209. '
  1210. PROCEDURE form_setedit
  1211.   LOCAL a%
  1212.   a%=m_edal%
  1213.   @rsrc_gaddr(0,11,*adresse%,*ret) ! Seted=11
  1214.   @draw_form
  1215.   @show_scrn
  1216.   PRINT AT(34,16);
  1217.   FORM INPUT 12 AS prg$                       ! Prg$ = Editor-Programm
  1218.   LET prg$=UPPER$(prg$)                       ! Change Case to Upper
  1219.   @swap_scrn
  1220.   gag!=TRUE
  1221.   @rsrc_gaddr(0,16,*adresse%,*ret)
  1222.   DPOKE (adresse%+10+4*24),0
  1223.   DPOKE (adresse%+10+5*24),0
  1224.   DPOKE (adresse%+10+9*24),0
  1225.   DPOKE (adresse%+10+10*24),0
  1226.   IF maus!=TRUE
  1227.     DPOKE (adresse%+10+4*24),1
  1228.   ELSE
  1229.     DPOKE (adresse%+10+5*24),1
  1230.   ENDIF
  1231.   IF box!=TRUE
  1232.     DPOKE (adresse%+10+9*24),1
  1233.   ELSE
  1234.     DPOKE (adresse%+10+10*24),1
  1235.   ENDIF
  1236.   seds_anf:
  1237.   @draw_form
  1238.   TEXT 54*8,12*16-2,a%
  1239.   @show_scrn
  1240.   @mind_box
  1241.   IF (DPEEK(adresse%+10+22*24) AND 1)=1 ! Memup=22
  1242.     DPOKE (adresse%+10+22*24),0
  1243.     IF a%<1000000
  1244.       ADD a%,10000
  1245.     ELSE
  1246.       PRINT CHR$(7);
  1247.     ENDIF
  1248.     VOID XBIOS(5,L:log_scrn%,L:phs_scrn%,-1)
  1249.     GOTO seds_anf
  1250.   ENDIF
  1251.   IF (DPEEK(adresse%+10+20*24) AND 1)=1 ! Memdwn=20
  1252.     DPOKE (adresse%+10+20*24),0
  1253.     IF a%>10000
  1254.       SUB a%,10000
  1255.     ELSE
  1256.       PRINT CHR$(7);
  1257.     ENDIF
  1258.     VOID XBIOS(5,L:log_scrn%,L:phs_scrn%,-1)
  1259.     GOTO seds_anf
  1260.   ENDIF
  1261.   IF (DPEEK(adresse%+10+11*24) AND 1)=1                   ! Abbruch
  1262.     DPOKE (adresse%+10+11*24),0
  1263.     GOTO verg_seted
  1264.   ENDIF
  1265.   IF (DPEEK(adresse%+10+13*24) AND 1)=1                   ! Speichern
  1266.     DPOKE (adresse%+10+13*24),0
  1267.     IF (DPEEK(adresse%+10+4*24) AND 1)=1
  1268.       maus!=TRUE
  1269.     ENDIF
  1270.     IF (DPEEK(adresse%+10+5*24) AND 1)=1
  1271.       maus!=FALSE
  1272.     ENDIF
  1273.     IF (DPEEK(adresse%+10+9*24) AND 1)=1
  1274.       box!=TRUE
  1275.     ENDIF
  1276.     IF (DPEEK(adresse%+10+10*24) AND 1)=1
  1277.       box!=FALSE
  1278.     ENDIF
  1279.     @rsrc_gaddr(0,15,*adresse%,*ret)
  1280.     @draw_form
  1281.     ed_alloc%=a%/100
  1282.     @write_dat
  1283.     @rsrc_gaddr(0,19,*adresse%,*ret)
  1284.     @draw_form
  1285.     @mind_box
  1286.     DPOKE (adresse%+10+9*24),0 ! Okreset=9
  1287.   ENDIF
  1288.   verg_seted:
  1289. RETURN
  1290. '
  1291. PROCEDURE form_fkeys
  1292.   fk_eingabe:
  1293.   @rsrc_gaddr(0,17,*adresse%,*ret)       ! F-Tasten-Rost holen
  1294.   @draw_form
  1295.   @show_scrn
  1296.   fk_dwn%=120                            ! Tasten zeigen
  1297.   FOR shw_fk%=1 TO 10
  1298.     TEXT 68,fk_dwn%,ftaste$(shw_fk%)
  1299.     ADD fk_dwn%,24
  1300.   NEXT shw_fk%
  1301.   @mind_box
  1302.   FOR stfk%=1 TO 10                      ! Stati der Tasten-Felder
  1303.     status_fk%(stfk%)=DPEEK(adresse%+10+stfk%*24)
  1304.   NEXT stfk%
  1305.   IF (DPEEK(adresse%+10+21*24) AND 1)=1  ! Abbruch geklickt (Fkabbr=21)
  1306.     DPOKE (adresse%+10+21*24),0
  1307.     GOTO verg_fk
  1308.   ENDIF
  1309.   IF (DPEEK(adresse%+10+24*24) AND 1)=1  ! Sichern geklickt (Fkok=24)
  1310.     DPOKE (adresse%+10+24*24),0
  1311.     HIDEM
  1312.     @rsrc_gaddr(0,15,*adresse%,*ret)
  1313.     @draw_form
  1314.     @write_dat
  1315.     SHOWM
  1316.     GOTO verg_fk
  1317.   ENDIF
  1318.   FOR stausfk%=1 TO 10                         ! Stati (1) bis (10)...
  1319.     IF (status_fk%(stausfk%) AND 1)=1
  1320.       DPOKE (adresse%+10+stausfk%*24),0        ! Knoepfe zurueck...
  1321.       LET fk_nr%=stausfk%                      ! Feldnummer von oben
  1322.     ENDIF
  1323.   NEXT stausfk%
  1324.   gag!=TRUE
  1325.   @swap_scrn
  1326.   @rsrc_gaddr(0,18,*adresse%,*ret)             ! Formular Eintrag
  1327.   @draw_form
  1328.   @show_scrn
  1329.   PRINT AT(7,16);
  1330.   FORM INPUT 67 AS ftaste$(fk_nr%)             ! Tasten-Eintrag eingeben
  1331.   gag!=TRUE
  1332.   @swap_scrn
  1333.   GOTO fk_eingabe                              ! Zurueck zum Roster
  1334.   verg_fk:
  1335. RETURN
  1336. '
  1337. PROCEDURE terminal(wahlnummer$)
  1338.   DEFFILL 1,2,8                               ! Selbstdarstellung...
  1339.   PBOX 0,0,640,14
  1340.   GRAPHMODE 3
  1341.   DEFTEXT 1,16,0,13
  1342.   TEXT 1,12,"omnibus2"
  1343.   DEFTEXT 1,0,0,13
  1344.   TEXT 79,12,"|"
  1345.   TEXT 85,12,"                   |"           ! Top-Leiste
  1346.   TEXT 125,12,"|"
  1347.   TEXT 169,12,"|"
  1348.   TEXT 300,12,"|"
  1349.   DEFTEXT 1,0,0,6
  1350.   '
  1351.   TEXT 309,10,"CPT:"         ! Capture
  1352.   TEXT 343,10,"STBY"
  1353.   '
  1354.   DEFTEXT 1,0,0,4
  1355.   TEXT 135,5,"E"
  1356.   TEXT 135+9,5,"L"
  1357.   TEXT 135+18,5,"U"
  1358.   TEXT 135+27,5,"D"
  1359.   '
  1360.   DEFTEXT 1,0,0,13
  1361.   TEXT 377,12,"|"
  1362.   GRAPHMODE 1
  1363.   DEFFILL 1,0,0                               ! Ende Selbstdarstellung
  1364.   '
  1365.   VOID BIOS(3,2,27)         ! Print At(1,2) und Bildschirm loeschen
  1366.   VOID BIOS(3,2,89)
  1367.   VOID BIOS(3,2,33)
  1368.   VOID BIOS(3,2,32)
  1369.   VOID BIOS(3,2,27)
  1370.   VOID BIOS(3,2,74)
  1371.   '
  1372.   modck!=TRUE                                 ! Modem abfragen
  1373.   '
  1374.   ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Handwahl?
  1375.   IF handw!=TRUE                              ! Handwahl war angeklickt
  1376.     '
  1377.     ' ----------------- Standards-Parameter in Top-Leiste: --------------------
  1378.     '
  1379.     @show_top(std_term$,std_speed$,std_bits$,std_parity$,std_stop$)
  1380.     IF capton!=TRUE
  1381.       @show_capt(c_s%)
  1382.     ELSE
  1383.       @show_capt(0)
  1384.     ENDIF
  1385.     @get_elud
  1386.     @get_log
  1387.     jump_show!=TRUE                           ! zum jumpen (s.u.)
  1388.     GOTO handwahl                             ! (Keine Nummer zum Waehlen)
  1389.   ENDIF
  1390.   ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1391.   ' ------------------- Gewaehlte Parameter in Top-Leister: -------------------
  1392.   '
  1393.   @show_top(n_term$,n_speed$,n_bits$,n_parity$,n_stop$)
  1394.   @get_elud
  1395.   @get_log
  1396.   '
  1397.   LET wahlnummer$="atdt"+wahlnummer$          ! Modem-Befehl vor Nummer...
  1398.   IF GEMDOS(&H13)=-1                          ! Stoepsel raus aus RS232?
  1399.     FOR aa=1 TO LEN(wahlnummer$)              ! Ja, Nummern schoen langsam
  1400.       LET senden$(aa)=MID$(wahlnummer$,aa,1)  ! und einzeln raus
  1401.       VOID GEMDOS(&H4,ASC(senden$(aa)))       ! damit Modemchen nicht ins
  1402.     NEXT aa                                   ! Hasten kommt
  1403.     LET wahlnummer$=""                        ! Temoraeren String leeren
  1404.     VOID GEMDOS(&H4,ASC(CHR$(13)))            ! Return hinterher jagen
  1405.   ENDIF                                       ! -ggf. RS232 zu-
  1406.   handwahl:
  1407.   '
  1408.   IF jump_show!=TRUE                          ! Handwahl-jumps (s.o.)
  1409.     @show_action("Terminal!")    !--------------------------------------------!
  1410.     jump_show!=FALSE             !Prozedur Show_action: Rechts oben gerade ab-!
  1411.     GOTO jump_show               !laufende Prozesse anzeigen. Automatisch     !
  1412.   ENDIF                          !Anzeige-Laenge formatieren.                 !
  1413.   @show_action("Dial "+wahl_name$)!------------------------------------------!
  1414.   LET wahl$=""                   ! Nummern-String auf null
  1415.   jump_show:                                  ! Handwahl-jump (s.o.)
  1416.   term_begin:                                 ! Term-Beginn nach Senden
  1417.   IF von_tr!=TRUE                             ! Wenn von Senden (s.d.)
  1418.     @show_action("On line")
  1419.     von_tr!=FALSE
  1420.   ENDIF
  1421.   raus!=FALSE     ! Ende Terminal-Schleife
  1422.   backsp!=FALSE   ! Backspace abfangen
  1423.   escape!=FALSE   ! ANSI-Sequenz-Beginn ueberwachen
  1424.   sonder!=FALSE   ! Spezielle Schriften
  1425.   static!=TRUE    ! Bis Modem "on line" meldet
  1426.   vt_capp!=FALSE  ! Cursor keys in application mode (VT100)
  1427.   vt_kapp!=FALSE  ! Keypad keys in application mode (VT100)
  1428.   no_tr!=FALSE    ! No trespass = RS232 gesperrt
  1429.   VOID XBIOS(&H15,1)                          ! Cursor einschalten
  1430.   VOID XBIOS(&H15,3)                          ! Cursor nicht blinken
  1431.   HIDEM                                       ! Maus weg
  1432.   '
  1433.   ' ::::::::::::::::::::::::: BEGINN DER HAUPTSCHLEIFE ::::::::::::::::::::::::
  1434.   '
  1435.   REPEAT
  1436.     '
  1437.     '   1. Teil: Horch', was kommt von draussen rein?
  1438.     '
  1439.     IF BIOS(1,1)=-1                         ! Wartet etwas an der RS232?
  1440.       auxin%=BIOS(2,1)                      ! Ja. Nummer holen...
  1441.       @auxin(auxin%)                        ! ...und analysieren
  1442.     ELSE                                    ! Nein. Dann (und NUR dann) Teil 2:
  1443.       '
  1444.       ' 2. Teil: Voelker hoert die Signale!
  1445.       '
  1446.       IF BIOS(1,2)=-1                       ! Ist etwas im Tastaturpuffer?
  1447.         conin%=BIOS(2,2)                    ! Ja. Nummer holen...
  1448.         @conin(conin%)                      ! ...und analysieren
  1449.       ENDIF                                 ! Nein. Wieder zu
  1450.     ENDIF                                   ! Teil 1
  1451.   UNTIL MOUSEK<>0                           ! Wenn Mausklick:
  1452.   '
  1453.   ' :::::::::::::::::::::::::: ENDE DER HAUPTSCHLEIFE :::::::::::::::::::::::::
  1454.   '
  1455.   DEFTEXT 1,0,0,13                          ! Nur zur Sicherheit
  1456.   IF MOUSEK=1                               ! Linke Maustaste?
  1457.     @senden                                 ! Dann senden und anschliessend
  1458.     GOTO term_begin                         ! zurueck in die Hauptschleife
  1459.   ENDIF                                     ! Wenn nicht linke Maustaste
  1460.   SHOWM                                     ! Maus zeigen,
  1461.   VOID XBIOS(&H15,0)                        ! Cursor aus und
  1462.   dialed!=TRUE
  1463. RETURN                                      ! Zurueck ins Hauptmenu oder Scrn
  1464. '
  1465. PROCEDURE auxin(rein%)       ! == Empfangenes Zeichen analysieren ==
  1466.   IF logon!=TRUE
  1467.     POKE count_log%,rein%
  1468.     INC count_log%
  1469.     IF count_log%>=log%+512
  1470.       GRAPHMODE 3
  1471.       TEXT 293,12,CHR$(2)
  1472.       l_fehler%=GEMDOS(&H40,l_handle%,L:512,L:log%)
  1473.       count_log%=log%
  1474.       TEXT 293,12,CHR$(2)
  1475.       GRAPHMODE 1
  1476.     ENDIF
  1477.   ENDIF
  1478.   ' -------------------- ANSI/VT100-Sequenz analysieren -----------------------
  1479.   IF sequenz!
  1480.     POKE seq%+slen%,rein%
  1481.     INC slen%
  1482.     IF rein%=65 OR rein%=66 OR rein%=67 OR rein%=68 OR rein%=72 OR rein%=99 OR rein%=102 OR rein%=104 OR rein%=108 OR rein%=109 OR rein%=110 OR rein%=75 OR rein%=74 OR rein%=117 OR rein%=115
  1483.       @sequenz(rein%,slen%)
  1484.       sequenz!=FALSE
  1485.       CLR slen%
  1486.     ENDIF
  1487.     rein%=0
  1488.   ENDIF
  1489.   ' -------------------- Glocke? ----------------------------------------------
  1490.   IF rein%=7
  1491.     VOID BIOS(3,2,7)
  1492.   ENDIF
  1493.   ' -------------------- Tabulator? -------------------------------------------
  1494.   IF rein%=9
  1495.     FOR ht%=1 TO 8                         ! cur 8 Schritte rechts bewegen
  1496.       EXIT IF CRSCOL=80
  1497.       VOID BIOS(3,2,27)                    ! Print Chr$(27);"C";
  1498.       VOID BIOS(3,2,67)
  1499.     NEXT ht%
  1500.   ENDIF
  1501.   ' -------------------- ANSI/VT100-Sequenz? ----------------------------------
  1502.   IF rein%=27                           ! Wenn Escape... (ev. in eigene Routine?)
  1503.     escape!=TRUE                        ! Flag
  1504.     rein%=0
  1505.   ENDIF
  1506.   IF rein%=91                           ! Wenn eckige Klammer...
  1507.     IF escape!                          ! Wenn vorab Escape...
  1508.       rein%=0                           ! Zeichen ignorieren...
  1509.       sequenz!=TRUE                     ! und Sequenz-Flagge an
  1510.       escape!=FALSE                     ! Flag zurueckstellen
  1511.     ENDIF
  1512.   ENDIF
  1513.   ' -------------------- VT100 special? ---------------------------------------
  1514.   IF escape!
  1515.     IF rein%=61 OR rein%=62 OR rein%=68 OR rein%=69 OR rein%=55 OR rein%=56 OR rein%=77 OR rein%=90
  1516.       @vt_seq(rein%)                    ! Spezielle VT100-Sequenzen
  1517.       rein%=0                           ! Zeichen danach ignorieren
  1518.       escape!=FALSE
  1519.     ENDIF
  1520.     IF rein%=72
  1521.       IF escape!
  1522.         ' Set tab in current pos
  1523.         escape!=FALSE
  1524.       ENDIF
  1525.     ENDIF
  1526.   ENDIF
  1527.   ' -------------------- "Normales" Zeichen? ------------------------------
  1528.   IF rein%>=32                          ! Gleich oder ab Leertaste...
  1529.     escape!=FALSE                       ! Nicht Ansi (z. Sicherheit)
  1530.     ' -----------------> Modem-Check <-------------------------------------
  1531.     IF modck!=TRUE
  1532.       IF mlen%<6                          ! Erste 6 Zeichen in des "neuen"
  1533.         POKE mod%+mlen%,rein%             ! Strings in Modem-Check-Speicher
  1534.         INC mlen%                         ! aufnehmen
  1535.       ENDIF                               !
  1536.     ENDIF
  1537.     ' ~~~~~~~~~~~~~~~~~~~ Protokollieren ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1538.     IF capton!=TRUE                       ! Wenn Caption eingeschaltet
  1539.       POKE count_capt%,rein%              ! Zeichen speichern
  1540.       INC count_capt%                     ! und Speicherstelle raufzaehlen
  1541.       INC c_ss%                           ! Speicher-voll-Anzeige
  1542.       IF c_ss%=c_percent%                 ! Prozentanzeige:
  1543.         DEC c_s%
  1544.         @show_capt(c_s%)
  1545.         CLR c_ss%
  1546.       ENDIF
  1547.     ENDIF
  1548.     ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1549.     IF CRSCOL<80                        ! Wenn Cursor nicht rechts aussen...
  1550.       '                  Backspace behandeln
  1551.       IF rein%=32                       ! Wenn Leertaste...
  1552.         IF backspace!=TRUE              ! Wenn durch Backspace verursacht
  1553.           rein%=0                       ! loeschen
  1554.           backspace!=FALSE              ! Flag zurueck
  1555.         ENDIF
  1556.       ENDIF
  1557.       '                  Art des Zeichens analysieren
  1558.       IF rein%>175                  ! Wenn IBM-Grafiksatz
  1559.         @pr_grafik(rein%)           ! entsprechend auf Schirm ausgeben
  1560.       ELSE
  1561.         IF sonder!=TRUE             ! Wenn Highlight, Underline oder Blink
  1562.           @pr_art(rein%)            ! entsprechend auf Schirm ausgeben
  1563.         ELSE                        ! Wenn Feld-Wald&Wiesen-ASCII:
  1564.           VOID BIOS(3,2,rein%)      ! Normales Zeichen auf Schirm
  1565.         ENDIF
  1566.       ENDIF
  1567.     ELSE                            ! Wenn nix von alledem
  1568.       rein%=13                      ! in Return umwandeln.
  1569.     ENDIF
  1570.   ENDIF                             !
  1571.   ' --------------------- Return ------------------------------------------
  1572.   IF rein%=13
  1573.     '                     ! Return behandeln:
  1574.     IF CRSLIN=25          ! Wenn Cursor in letzter Zeile auf Schirm...
  1575.       IF lf!=TRUE         ! Wenn "Add LF upon CR" = "Yes"
  1576.         VOID BIOS(3,2,27) ! Sequenz Esc+Y Zeile 2 (31+2) Spalte 1 (32+1)
  1577.         VOID BIOS(3,2,89) ! = Cursor home
  1578.         VOID BIOS(3,2,33)
  1579.         VOID BIOS(3,2,32)
  1580.         VOID BIOS(3,2,27) ! Esc+"M" = oberste Zeile loeschen...
  1581.         VOID BIOS(3,2,77) ! ...und Bildschirm scrollen
  1582.         VOID BIOS(3,2,27) ! Cursor wieder an Anfang letzte Zeile
  1583.         VOID BIOS(3,2,89)
  1584.         VOID BIOS(3,2,56)
  1585.         VOID BIOS(3,2,32)
  1586.       ELSE                ! Wenn "Add LF upon CR" = "No"
  1587.         VOID BIOS(3,2,13) ! lediglich Carriage return ausgeben
  1588.       ENDIF
  1589.     ELSE                  ! Wenn Cursor nicht in letzter Zeile...
  1590.       IF lf!=TRUE         ! Wenn "Add LF upon CR" = "Yes"
  1591.         VOID BIOS(3,2,13) ! Carriage return...
  1592.         VOID BIOS(3,2,10) ! und Line feed ausgeben
  1593.       ELSE                ! andernfalls
  1594.         VOID BIOS(3,2,13) ! nur Carriage return ausgeben
  1595.       ENDIF
  1596.     ENDIF
  1597.     IF capton!=TRUE          ! Wenn Caption on
  1598.       IF wp_down!=TRUE       ! Wenn WordPlus-Wandlung download on
  1599.         POKE count_capt%,30  ! Ein Wordplus-Zw'raum vor CR/LF
  1600.         INC count_capt%
  1601.       ENDIF
  1602.       POKE count_capt%,13    ! Zeile mit CR/LF abschliessen
  1603.       INC count_capt%
  1604.       POKE count_capt%,10
  1605.       INC count_capt%
  1606.     ENDIF
  1607.     IF modck!=TRUE
  1608.       @modem                ! Modem-Check
  1609.       CLR mlen%             ! Len% zurueckstellen
  1610.     ENDIF
  1611.   ENDIF
  1612. RETURN
  1613. '
  1614. PROCEDURE conin(key%)     ! == Von Tastatur kommendes Zeichen analysieren ==
  1615.   bscan%=INT(key%/65536) AND &HFF       ! Scancode
  1616.   bshift%=INT(key%/65536/256)           ! Shift-Byte
  1617.   keychar$=CHR$(key%)                   ! Zeichen ist ASCII(Nummer)
  1618.   '
  1619.   IF (bshift% AND 8)<>0                 ! Alternate-Taste gedrueckt
  1620.     no_tr!=TRUE
  1621.     @alternate                          ! Welche Taste?
  1622.     no_tr!=FALSE
  1623.   ENDIF
  1624.   '
  1625.   IF keychar$=""                        ! Falls keine Nummer
  1626.     VOID GEMDOS(&H4,ASC(""))            ! Fehler abfangen
  1627.   ENDIF
  1628.   '
  1629.   IF keychar$=CHR$(0)                   ! Sondertaste
  1630.     key%=key% DIV 65536                 ! Scancode
  1631.     @scancode
  1632.     IF vt100!
  1633.       IF key%=&H48 OR key%=&H4B OR key%=&H50 OR key%=&H4D
  1634.         IF vt_capp!
  1635.           keychar$=""
  1636.           @vt_cura(key%)
  1637.         ELSE
  1638.           keychar$=""
  1639.           @vt_curn(key%)
  1640.         ENDIF
  1641.       ENDIF
  1642.     ENDIF
  1643.   ENDIF
  1644.   '
  1645.   IF vt100!
  1646.     key%=key% DIV 65536
  1647.     IF key%=>&H63 AND key%=<&H72 OR key%=&H4A OR key%=&H4E
  1648.       IF vt_kapp!
  1649.         keychar$=""
  1650.         @vt_key(key%)
  1651.       ENDIF
  1652.     ENDIF
  1653.   ENDIF
  1654.   '
  1655.   IF echo!=TRUE                         ! Wenn lokales Echo eingeschaltet
  1656.     IF keychar$=>" "
  1657.       IF CRSCOL<80
  1658.         PRINT keychar$;
  1659.       ELSE
  1660.         keychar$=CHR$(13)
  1661.       ENDIF
  1662.     ENDIF
  1663.     IF keychar$=CHR$(13)
  1664.       IF CRSLIN=25
  1665.         y_pos=CRSLIN
  1666.         PRINT AT(1,2);
  1667.         PRINT del_lines$;
  1668.         PRINT AT(1,y_pos);
  1669.       ELSE
  1670.         PRINT CHR$(13)
  1671.       ENDIF
  1672.     ENDIF
  1673.   ENDIF
  1674.   '
  1675.   '                                          !-----------------------------!
  1676.   IF keychar$=CHR$(8)                        ! Wenn Backspace gedrueckt    !
  1677.     PRINT CHR$(27)+"D";CHR$(32);CHR$(27)+"D";! wurde, sendet das Modem ei- !
  1678.     backspace!=TRUE ! (s.o.)                 ! ne Leertaste; der Cursor    !
  1679.   ENDIF                                      ! muss entsprechend zurueck-  !
  1680.   '                                          ! gefahren und der Eingang    !
  1681.   '                                          ! vorgewarnt werden (mit Flag)!
  1682.   '                                          ! ----------------------------!
  1683.   '
  1684.   IF no_tr!=FALSE                         ! Wenn gestattet (nicht lokal)
  1685.     IF GEMDOS(&H13)=-1                    ! Wenn RS232 bereit
  1686.       VOID GEMDOS(&H4,ASC(keychar$))      ! Zeichen(Nummer) raus
  1687.     ENDIF                                 ! in die weite Welt
  1688.   ENDIF
  1689.   '
  1690.   IF LEN(f_text$)>0
  1691.     IF RIGHT$(f_text$)="|"
  1692.       add_ret!=TRUE
  1693.       LET f_text$=LEFT$(f_text$,LEN(f_text$)-1)
  1694.     ENDIF
  1695.     FOR fk_a%=1 TO LEN(f_text$)
  1696.       PAUSE 4
  1697.       LET fk_sende$(fk_a%)=MID$(f_text$,fk_a%,1)
  1698.       VOID GEMDOS(&H4,ASC(fk_sende$(fk_a%)))
  1699.     NEXT fk_a%
  1700.     LET f_text$=""
  1701.     IF add_ret!=TRUE
  1702.       VOID GEMDOS(&H4,ASC(CHR$(13)))
  1703.       add_ret!=FALSE
  1704.     ENDIF
  1705.   ENDIF
  1706. RETURN
  1707. '
  1708. PROCEDURE vt_cura(vtcura%)
  1709.   LOCAL o%
  1710.   o%=79
  1711.   VOID BIOS(3,1,27)
  1712.   VOID BIOS(3,1,o%)
  1713.   IF vtcurn%=&H48
  1714.     VOID BIOS(3,1,65)
  1715.   ENDIF
  1716.   IF vtcurn%=&H50
  1717.     VOID BIOS(3,1,66)
  1718.   ENDIF
  1719.   IF vtcurn%=&H4D
  1720.     VOID BIOS(3,1,67)
  1721.   ENDIF
  1722.   IF vtcurn%=&H4B
  1723.     VOID BIOS(3,1,68)
  1724.   ENDIF
  1725. RETURN
  1726. '
  1727. PROCEDURE vt_curn(vtcurn%)
  1728.   VOID BIOS(3,1,27)
  1729.   VOID BIOS(3,1,91)
  1730.   IF vtcurn%=&H48
  1731.     VOID BIOS(3,1,65)
  1732.   ENDIF
  1733.   IF vtcurn%=&H50
  1734.     VOID BIOS(3,1,66)
  1735.   ENDIF
  1736.   IF vtcurn%=&H4D
  1737.     VOID BIOS(3,1,67)
  1738.   ENDIF
  1739.   IF vtcurn%=&H4B
  1740.     VOID BIOS(3,1,68)
  1741.   ENDIF
  1742. RETURN
  1743. '
  1744. PROCEDURE vt_key(vtkey%)
  1745.   LOCAL o%
  1746.   o%=79
  1747.   VOID BIOS(3,1,27)
  1748.   VOID BIOS(3,1,o%)
  1749.   IF vtkey%=&H4A
  1750.     VOID BIOS(3,1,109)
  1751.   ENDIF
  1752.   IF vtkey%=&H4E
  1753.     VOID BIOS(3,1,108)
  1754.   ENDIF
  1755.   IF vtkey%=&H63
  1756.     VOID BIOS(3,1,80)
  1757.   ENDIF
  1758.   IF vtkey%=&H64
  1759.     VOID BIOS(3,1,81)
  1760.   ENDIF
  1761.   IF vtkey%=&H65
  1762.     VOID BIOS(3,1,82)
  1763.   ENDIF
  1764.   IF vtkey%=&H66
  1765.     VOID BIOS(3,1,83)
  1766.   ENDIF
  1767.   IF vtkey%=&H67
  1768.     VOID BIOS(3,1,119)
  1769.   ENDIF
  1770.   IF vtkey%=&H68
  1771.     VOID BIOS(3,1,120)
  1772.   ENDIF
  1773.   IF vtkey%=&H69
  1774.     VOID BIOS(3,1,121)
  1775.   ENDIF
  1776.   IF vtkey%=&H6A
  1777.     VOID BIOS(3,1,116)
  1778.   ENDIF
  1779.   IF vtkey%=&H6B
  1780.     VOID BIOS(3,1,117)
  1781.   ENDIF
  1782.   IF vtkey%=&H6C
  1783.     VOID BIOS(3,1,118)
  1784.   ENDIF
  1785.   IF vtkey%=&H6D
  1786.     VOID BIOS(3,1,113)
  1787.   ENDIF
  1788.   IF vtkey%=&H6E
  1789.     VOID BIOS(3,1,114)
  1790.   ENDIF
  1791.   IF vtkey%=&H6F
  1792.     VOID BIOS(3,1,115)
  1793.   ENDIF
  1794.   IF vtkey%=&H70
  1795.     VOID BIOS(3,1,112)
  1796.   ENDIF
  1797.   IF vtkey%=&H71
  1798.     VOID BIOS(3,1,110)
  1799.   ENDIF
  1800.   IF vtkey%=&H72
  1801.     VOID BIOS(3,1,77)
  1802.   ENDIF
  1803. RETURN
  1804. '
  1805. PROCEDURE open_log
  1806.   LOCAL ck_pth$,ck_file$,ck_cplt!,ck_mth%,mth$
  1807.   ck_cplt!=FALSE
  1808.   ck_pth$=LEFT$(pfad$,LEN(pfad$)-3)
  1809.   REPEAT
  1810.     INC log_nr%
  1811.     ck_file$=ck_pth$+"log_"+STR$(log_nr%)+".dwn"
  1812.     IF NOT EXIST(ck_file$)
  1813.       ck_cplt!=TRUE
  1814.     ENDIF
  1815.   UNTIL ck_cplt!=TRUE
  1816.   default$="LOG_"+STR$(log_nr%)+".DWN"
  1817.   @fselbox(default$,"Open Log",-1)
  1818.   IF fs_frgt!
  1819.     DEC log_nr%
  1820.   ELSE
  1821.     @toggle_log(1)
  1822.     logon!=TRUE
  1823.     GRAPHMODE 3
  1824.     TEXT 293,12,CHR$(2)
  1825.     IF EXIST(treatfile$)
  1826.       l_handle%=GEMDOS(&H3D,L:VARPTR(treatfile$),0)
  1827.     ELSE
  1828.       l_handle%=GEMDOS(&H3C,L:VARPTR(treatfile$),0)
  1829.     ENDIF
  1830.     CLR ck_mth%
  1831.     RESTORE mth
  1832.     REPEAT
  1833.       INC ck_mth%
  1834.       READ mth$
  1835.     UNTIL ck_mth%=VAL(MID$(DATE$,4,2))
  1836.     '                          "     .                  .
  1837.     hinweis$=CHR$(13)+CHR$(10)+"     LOG recorded "+STR$(VAL(LEFT$(DATE$,2)))+". "+mth$+" 19"+RIGHT$(DATE$,2)+" - System time: "+LEFT$(TIME$,5)+" (+"+STR$(VAL(RIGHT$(TIME$,2)))+" Seconds)"+CHR$(13)+CHR$(10)+CHR$(10)
  1838.     h_handle%=GEMDOS(&H40,l_handle%,L:LEN(hinweis$),L:VARPTR(hinweis$))
  1839.     TEXT 293,12,CHR$(2)
  1840.     GRAPHMODE 1
  1841.   ENDIF
  1842. RETURN
  1843. '
  1844. PROCEDURE show_dir
  1845.   LOCAL era$,rumpf$,krit$,tail$,name$,fehler%,zeile%
  1846.   rumpf$=LEFT$(pfad$,LEN(pfad$)-3)
  1847.   tail$="*.*"
  1848.   '
  1849.   @rsrc_gaddr(0,14,*adresse%,*ret)
  1850.   @draw_form     !ffff
  1851.   '                   .                 .
  1852.   TEXT 31*8-1,10*16+7,"Enter file spec  "
  1853.   TEXT 31*8-1,11*16+7,"      or         "
  1854.   TEXT 31*8-1,12*16+7,"Return for "+CHR$(34)+"*.*"+CHR$(34)+"!"
  1855.   PRINT AT(34,16);
  1856.   FORM INPUT 12 AS tail$
  1857.   krit$=rumpf$+tail$
  1858.   @clr_home
  1859.   '
  1860.   CLR fehler%
  1861.   fgetdta%=GEMDOS(47)                     ! Ads des Disk-Transfers-Puffers
  1862.   era$=SPACE$(12)                         ! zum Loeschen
  1863.   BMOVE VARPTR(era$),fgetdta%+30,12       ! 12 Spaces in DTP
  1864.   fehler%=GEMDOS(78,L:VARPTR(krit$),0)       ! Fsfirst
  1865.   IF fehler%=0
  1866.     name$=SPACE$(12)
  1867.     BMOVE fgetdta%+30,VARPTR(name$),12
  1868.     PRINT AT(3,2);name$;
  1869.     PRINT SPC(2);LPEEK(fgetdta%+26)
  1870.   ELSE
  1871.     PRINT CHR$(7);
  1872.     '            .                            .
  1873.     @show_action("No such file - press any key")
  1874.     GOTO no_match
  1875.   ENDIF
  1876.   '
  1877.   CLR zeile%,fehler%
  1878.   WHILE fehler%=0
  1879.     INC zeile%
  1880.     era$=SPACE$(12)
  1881.     BMOVE VARPTR(era$),fgetdta%+30,12
  1882.     fehler%=GEMDOS(79)                    ! Fsnext
  1883.     name$=SPACE$(12)
  1884.     BMOVE fgetdta%+30,VARPTR(name$),12
  1885.     IF zeile%<23
  1886.       PRINT SPC(2);name$;
  1887.       IF fehler%=0
  1888.         PRINT SPC(2);LPEEK(fgetdta%+26)
  1889.       ENDIF
  1890.     ELSE
  1891.       PRINT CHR$(7);
  1892.       '            .                           .
  1893.       @show_action("Press any key for more!")
  1894.       VOID INP(2)
  1895.       CLR zeile%
  1896.       @clr_home
  1897.     ENDIF
  1898.   WEND
  1899.   PRINT CHR$(7);
  1900.   '            .                          .
  1901.   @show_action("Done - press any key!")
  1902.   no_match:
  1903.   VOID INP(2)
  1904. RETURN
  1905. '
  1906. PROCEDURE clr_home
  1907.   PRINT AT(1,2);
  1908.   PRINT CHR$(27);"J";
  1909.   PRINT AT(1,2);
  1910. RETURN
  1911. '
  1912. PROCEDURE view_file
  1913.   LOCAL anz%,iv%,v_z%,br%,brkey%,scan%,brbr%,fehler%
  1914.   IF logon!=TRUE
  1915.     @scrn_save
  1916.     @rsrc_gaddr(0,21,*adresse%,*ret)
  1917.     @draw_form
  1918.     @mind_box
  1919.     DPOKE (adresse%+10+3*24),0
  1920.     @scrn_show
  1921.     GOTO verg_wf
  1922.   ENDIF
  1923.   @fselbox("","Replay file",-1)
  1924.   IF fs_frgt!
  1925.     GOTO verg_wf
  1926.   ELSE
  1927.     modck!=FALSE
  1928.     capton=FALSE
  1929.     @show_capt(-1)
  1930.     @fltr_fnam
  1931.     @show_action("View "+showfile$)
  1932.     br%=300
  1933.     OPEN "I",#19,treatfile$
  1934.     anz%=LOF(#19)
  1935.     CLOSE #19
  1936.     IF anz%<32512
  1937.       BLOAD treatfile$,scrn%
  1938.       FOR iv%=scrn% TO scrn%+anz%
  1939.         IF GEMDOS(&HB)=-1
  1940.           brkey%=GEMDOS(&H7)
  1941.           scan%=INT(brkey%/65536) AND &HFF
  1942.         ENDIF
  1943.         EXIT IF scan%=&H61
  1944.         IF scan%=&H1
  1945.           scan%=0
  1946.           VOID INP(2)
  1947.         ENDIF
  1948.         IF scan%=75
  1949.           ADD br%,25
  1950.         ENDIF
  1951.         IF scan%=77
  1952.           SUB br%,25
  1953.         ENDIF
  1954.         br%=MAX(300,br%)
  1955.         br%=MIN(900,br%)
  1956.         v_z%=PEEK(iv%)
  1957.         @auxin(v_z%)
  1958.         FOR brbr%=1 TO br%
  1959.         NEXT brbr%
  1960.       NEXT iv%
  1961.     ELSE
  1962.       '             .                       .                     .
  1963.       LET s_warn$=" | Sorry, no way!        | This file is too    | big to replay! "
  1964.       ALERT 1,s_warn$,1," Sigh! ",dummy%
  1965.     ENDIF
  1966.     @show_action("End "+showfile$)
  1967.     modck!=TRUE
  1968.     capton!=TRUE
  1969.     @show_capt(c_s%)
  1970.   ENDIF
  1971.   verg_wf:
  1972. RETURN
  1973. '
  1974. PROCEDURE screendump
  1975.   LOCAL hgrund$,ck_mth%,mth$,dumptxt$
  1976.   @fselbox("","Hardcopy to Disk",TRUE)
  1977.   IF fs_frgt!
  1978.   ELSE
  1979.     GET 80,1,520,14,hgrund$
  1980.     GRAPHMODE 1
  1981.     DEFFILL 1,0
  1982.     PBOX 80,0,520,14
  1983.     DEFTEXT 1,0,0,6
  1984.     CLR ck_mth%
  1985.     RESTORE mth
  1986.     REPEAT
  1987.       INC ck_mth%
  1988.       READ mth$
  1989.     UNTIL ck_mth%=VAL(MID$(DATE$,4,2))
  1990.     dumptxt$=CHR$(2)+" Sys: Datum/Zeit: "+STR$(VAL(LEFT$(DATE$,2)))+". "+mth$+" 19"+RIGHT$(DATE$,2)+" - "+LEFT$(TIME$,5)+" [+"+STR$(VAL(RIGHT$(TIME$,2)))+" S] "+CHR$(2)
  1991.     TEXT 85,10,dumptxt$
  1992.     BSAVE treatfile$,XBIOS(2),32000
  1993.     PUT 80,1,hgrund$
  1994.     CLR hgrund$,dumptxt$
  1995.   ENDIF
  1996. RETURN
  1997. '
  1998. PROCEDURE alternate                    ! Alternate-Kombination abfragen
  1999.   DEFTEXT 1,0,0,13                     ! Nur z. Sicherheit
  2000.   IF bscan%=&H42                       ! F8: Sende Xmodem
  2001.     @fselbox("","Xmodem upload",TRUE)
  2002.     IF fs_frgt!
  2003.       GOTO vergiss_xs
  2004.     ELSE
  2005.       @fltr_fnam                       ! Dateiname aus Pfad filtern...
  2006.       @show_action("Uploading "+showfile$) ! ... und anzeigen
  2007.       @xmodem_send(treatfile$)
  2008.       @show_action("On line")
  2009.     ENDIF
  2010.     vergiss_xs:                        ! Falls OK ohne Datei
  2011.   ENDIF
  2012.   IF bscan%=&H43                       ! F9 Xmodem empfang
  2013.     @fselbox("","Xmodem download",TRUE)
  2014.     IF fs_frgt!
  2015.       GOTO vergiss_xr                  ! und den Quatsch vergessen
  2016.     ELSE
  2017.       @fltr_fnam
  2018.       @show_action("Downloading "+showfile$) ! ... und anzeigen
  2019.       @xmodem_receive(treatfile$)
  2020.       @show_action("On line")
  2021.     ENDIF
  2022.     vergiss_xr:                        ! Falls OK ohne Datei
  2023.   ENDIF
  2024.   IF bscan%=&H3B                       ! Alt-F1 Log
  2025.     IF logon!=FALSE
  2026.       @open_log
  2027.     ELSE
  2028.       GRAPHMODE 3
  2029.       TEXT 293,12,CHR$(2)
  2030.       rest%=count_log%-log%
  2031.       r_fehler%=GEMDOS(&H40,l_handle%,L:rest%,L:log%)
  2032.       count_log%=log%
  2033.       endlog$=CHR$(13)+CHR$(10)+CHR$(13)+CHR$(10)+"---End of LOG---"+CHR$(13)+CHR$(10)+CHR$(10)
  2034.       e_handle%=GEMDOS(&H40,l_handle%,L:LEN(endlog$),L:VARPTR(endlog$))
  2035.       s_fehler%=GEMDOS(&H3E,l_handle%)
  2036.       TEXT 293,12,CHR$(2)
  2037.       GRAPHMODE 1
  2038.       @toggle_log(0)
  2039.       logon!=FALSE
  2040.     ENDIF
  2041.   ENDIF
  2042.   IF bscan%=&H3C                 ! Alt-F2 Capture
  2043.     IF capton!=FALSE
  2044.       @show_capt(c_s%)
  2045.       capton!=TRUE
  2046.     ELSE
  2047.       @show_capt(0)
  2048.       capton!=FALSE
  2049.     ENDIF
  2050.   ENDIF
  2051.   IF bscan%=&H3D                 ! Alt-F3 Bildschirm loeschen
  2052.     @clr_home
  2053.   ENDIF
  2054.   IF bscan%=&H12                 ! Alt-E Echo
  2055.     IF echo!=TRUE
  2056.       echo!=FALSE
  2057.       @show_elud(135,0)
  2058.     ELSE
  2059.       echo!=TRUE
  2060.       @show_elud(135,1)
  2061.     ENDIF
  2062.   ENDIF
  2063.   IF bscan%=&H26                 ! Alt-L CR/LF
  2064.     IF lf!=TRUE
  2065.       lf!=FALSE
  2066.       @show_elud(135+9,0)
  2067.     ELSE
  2068.       lf!=TRUE
  2069.       @show_elud(135+9,1)
  2070.     ENDIF
  2071.   ENDIF
  2072.   IF bscan%=&H16                 ! Alt-U WordPlus Upload
  2073.     IF wp_up!=TRUE
  2074.       wp_up!=FALSE
  2075.       @show_elud(135+18,0)
  2076.     ELSE
  2077.       wp_up!=TRUE
  2078.       @show_elud(135+18,1)
  2079.     ENDIF
  2080.   ENDIF
  2081.   IF bscan%=&H20                 ! Alt-D WordPlus Download
  2082.     IF wp_down!=TRUE
  2083.       wp_down!=FALSE
  2084.       @show_elud(135+27,0)
  2085.     ELSE
  2086.       wp_down!=TRUE
  2087.       @show_elud(135+27,2)
  2088.     ENDIF
  2089.   ENDIF
  2090.   IF bscan%=&H44                 ! Alt-F10 File anschauen
  2091.     @view_file
  2092.   ENDIF
  2093.   IF bscan%=&H23                 ! Alt-H Screendump auf Disk
  2094.     @screendump
  2095.   ENDIF
  2096.   IF bscan%=&H11                 ! Alt-W Waehlen
  2097.     IF static!=TRUE
  2098.       from_alt!=TRUE
  2099.       dialed!=FALSE
  2100.       handw!=FALSE
  2101.       SHOWM
  2102.       @scrn_save
  2103.       @form_wahl
  2104.       @scrn_show
  2105.       HIDEM
  2106.       from_alt!=FALSE
  2107.     ELSE
  2108.       @disagree
  2109.     ENDIF
  2110.   ENDIF
  2111.   IF bscan%=&H32                 ! Alt-M F-Tasten
  2112.     from_alt!=TRUE
  2113.     VOID BIOS(3,2,27)
  2114.     VOID BIOS(3,2,106)
  2115.     VOID XBIOS(&H15,0)
  2116.     SHOWM
  2117.     @scrn_save
  2118.     @form_fkeys
  2119.     @scrn_show
  2120.     HIDEM
  2121.     VOID XBIOS(&H15,1)
  2122.     VOID XBIOS(&H15,3)
  2123.     VOID BIOS(3,2,27)
  2124.     VOID BIOS(3,2,107)
  2125.     from_alt!=FALSE
  2126.   ENDIF
  2127.   IF bscan%=&H1E                 ! Alt-A Editor
  2128.     from_alt!=TRUE
  2129.     VOID BIOS(3,2,27)
  2130.     VOID BIOS(3,2,106)
  2131.     BMOVE XBIOS(2),log_scrn%,32000
  2132.     @exec_editor
  2133.     BMOVE log_scrn%,XBIOS(2),32000
  2134.     HIDEM
  2135.     VOID XBIOS(&H15,1)
  2136.     VOID XBIOS(&H15,3)
  2137.     VOID BIOS(3,2,27)
  2138.     VOID BIOS(3,2,107)
  2139.     from_alt!=FALSE
  2140.   ENDIF
  2141.   IF bscan%=&H30                 ! Alt-B Datenpfad
  2142.     from_alt!=TRUE
  2143.     VOID BIOS(3,2,27)                ! Cursor sichern und aus
  2144.     VOID BIOS(3,2,106)
  2145.     VOID XBIOS(&H15,0)
  2146.     SHOWM
  2147.     @scrn_save
  2148.     @form_path
  2149.     @scrn_show
  2150.     HIDEM
  2151.     VOID XBIOS(&H15,1)               ! Cursor ein und wiederherstellen
  2152.     VOID XBIOS(&H15,3)
  2153.     VOID BIOS(3,2,27)
  2154.     VOID BIOS(3,2,107)
  2155.     from_alt!=FALSE
  2156.   ENDIF
  2157.   IF bscan%=&H1F                 ! Alt-S Parameter/Terminal
  2158.     IF static!=TRUE
  2159.       from_alt!=TRUE
  2160.       VOID BIOS(3,2,27)
  2161.       VOID BIOS(3,2,106)
  2162.       VOID XBIOS(&H15,0)
  2163.       SHOWM
  2164.       @scrn_save
  2165.       @form_paras
  2166.       @scrn_show
  2167.       HIDEM
  2168.       VOID XBIOS(&H15,1)
  2169.       VOID XBIOS(&H15,3)
  2170.       VOID BIOS(3,2,27)
  2171.       VOID BIOS(3,2,107)
  2172.       from_alt!=FALSE
  2173.     ELSE
  2174.       @disagree
  2175.     ENDIF
  2176.   ENDIF
  2177.   IF bscan%=&H21                 ! Alt-F Directory
  2178.     VOID BIOS(3,2,27)                ! Cursor sichern und aus
  2179.     VOID BIOS(3,2,106)
  2180.     VOID XBIOS(&H15,0)
  2181.     @scrn_save
  2182.     @show_dir
  2183.     @scrn_show
  2184.     HIDEM
  2185.     VOID XBIOS(&H15,1)               ! Cursor ein und wiederherstellen
  2186.     VOID XBIOS(&H15,3)
  2187.     VOID BIOS(3,2,27)
  2188.     VOID BIOS(3,2,107)
  2189.   ENDIF
  2190.   IF bscan%=&H61                     ! Alt-Undo
  2191.     '              .           .            .
  2192.     LET endwarn$=" |  Quit     | omnibus2?  "
  2193.     ALERT 2,endwarn$,1," Yes | No ",endvar%
  2194.     IF endvar%=1
  2195.       END
  2196.     ENDIF
  2197.   ENDIF
  2198. RETURN
  2199. '
  2200. PROCEDURE disagree
  2201.   SOUND 1,15,5,3
  2202.   WAVE 1,1,11,444,15
  2203.   SOUND 1,0,0,0,0
  2204. RETURN
  2205. '
  2206. PROCEDURE put_log_scrn
  2207.   IF NOT down!
  2208.     psnd%=16000
  2209.     pssnd%=3200
  2210.     BMOVE log_scrn%+16000,XBIOS(2)+16000,3200
  2211.     BMOVE log_scrn%+32000-16000,XBIOS(2)+32000-16000,3200
  2212.     FOR i%=1 TO 5
  2213.       ADD pssnd%,3200
  2214.       BMOVE log_scrn%+psnd%,XBIOS(2)+psnd%,3200
  2215.       BMOVE log_scrn%+32000-psnd%,XBIOS(2)+32000-psnd%,3200
  2216.       SOUND 1,15,pssnd%/1000,6
  2217.       WAVE 1,1,9,8000,1
  2218.       SUB psnd%,3200
  2219.     NEXT i%
  2220.     BMOVE log_scrn%+psnd%,XBIOS(2)+psnd%,3200
  2221.     SOUND 1,0,0,0,0
  2222.   ELSE
  2223.     pssnd%=16000
  2224.     BMOVE log_scrn%,XBIOS(2),3200
  2225.     FOR i%=3200 TO 16000 STEP 3200
  2226.       SUB pssnd%,3200
  2227.       BMOVE log_scrn%+32000-i%,XBIOS(2)+32000-i%,3200
  2228.       BMOVE log_scrn%+i%,XBIOS(2)+i%,3200
  2229.       SOUND 1,15,pssnd%/1000,6
  2230.       WAVE 1,1,9,8000,1
  2231.     NEXT i%
  2232.     SOUND 1,0,0,0,0
  2233.   ENDIF
  2234.   down!=FALSE
  2235. RETURN
  2236. '
  2237. PROCEDURE scancode                     ! Sondertasten abfragen
  2238.   LOCAL screen$
  2239.   DEFTEXT 1,0,0,13                     ! Nur z. Sicherheit
  2240.   IF key%=&H62                         ! Help-Taste:
  2241.     @help
  2242.   ENDIF
  2243.   IF key%=&H3B                         ! F-Tasten...
  2244.     f_text$=ftaste$(1)
  2245.   ENDIF
  2246.   IF key%=&H3C
  2247.     f_text$=ftaste$(2)
  2248.   ENDIF
  2249.   IF key%=&H3D
  2250.     f_text$=ftaste$(3)
  2251.   ENDIF
  2252.   IF key%=&H3E
  2253.     f_text$=ftaste$(4)
  2254.   ENDIF
  2255.   IF key%=&H3F
  2256.     f_text$=ftaste$(5)
  2257.   ENDIF
  2258.   IF key%=&H40
  2259.     f_text$=ftaste$(6)
  2260.   ENDIF
  2261.   IF key%=&H41
  2262.     f_text$=ftaste$(7)
  2263.   ENDIF
  2264.   IF key%=&H42
  2265.     f_text$=ftaste$(8)
  2266.   ENDIF
  2267.   IF key%=&H43
  2268.     f_text$=ftaste$(9)
  2269.   ENDIF
  2270.   IF key%=&H44
  2271.     f_text$=ftaste$(10)
  2272.   ENDIF
  2273. RETURN
  2274. '
  2275. PROCEDURE help
  2276.   @scrn_save
  2277.   SHOWM
  2278.   @rsrc_gaddr(0,20,*adresse%,*ret)
  2279.   @draw_form
  2280.   @mind_box
  2281.   DPOKE (adresse%+10+1*24),0       ! OK-Knopf zurueck
  2282.   HIDEM
  2283.   @scrn_show
  2284. RETURN
  2285. '
  2286. ' #################### ANSI/VT100-SEQUENZEN ANALYSIEREN #######################
  2287. '
  2288. PROCEDURE vt_seq(reinvt%)               ! Esc-=/>/D/M/E/7/8-Sequenz:
  2289.   IF reinvt%=61                         ! "=" keypad keys in application mode
  2290.     vt_kapp!=TRUE
  2291.   ENDIF
  2292.   IF reinvt%=62                         ! ">" keypad keys in numeric mode
  2293.     vt_kapp!=FALSE
  2294.   ENDIF
  2295.   IF reinvt%=55                         ! "7" Save cur pos (spaeter: auch Art sichern)
  2296.     VOID BIOS(3,2,27)                   ! Print Chr$(27);"j";
  2297.     VOID BIOS(3,2,106)
  2298.   ENDIF
  2299.   IF reinvt%=56                         ! "8" Restore cur pos (spaeter: auch Art)
  2300.     VOID BIOS(3,2,27)                   ! Print Chr$(27);"k";
  2301.     VOID BIOS(3,2,107)
  2302.   ENDIF
  2303.   IF reinvt%=68                         ! "D" Down
  2304.     IF CRSLIN=25
  2305.       VOID BIOS(3,2,27)                 ! Print Chr$(27);"j";
  2306.       VOID BIOS(3,2,106)
  2307.       VOID BIOS(3,2,27)                 ! Print At(1,2); (cur home)
  2308.       VOID BIOS(3,2,89)
  2309.       VOID BIOS(3,2,33)
  2310.       VOID BIOS(3,2,32)
  2311.       VOID BIOS(3,2,27)                 ! Print Chr$(27);"M";
  2312.       VOID BIOS(3,2,77)
  2313.       VOID BIOS(3,2,27)                 ! Print Chr$(27);"k";
  2314.       VOID BIOS(3,2,107)
  2315.     ELSE
  2316.       VOID BIOS(3,2,27)                 ! Print Chr$(27);"B";
  2317.       VOID BIOS(3,2,66)
  2318.     ENDIF
  2319.   ENDIF
  2320.   IF reinvt%=77                         ! "M" Up
  2321.     IF CRSLIN=2
  2322.       VOID BIOS(3,2,27)                 ! Print Chr$(27);"j";
  2323.       VOID BIOS(3,2,106)
  2324.       VOID BIOS(3,2,27)                 ! Print Chr$(27);"L";
  2325.       VOID BIOS(3,2,76)
  2326.       VOID BIOS(3,2,27)                 ! Print Chr$(27);"k";
  2327.       VOID BIOS(3,2,107)
  2328.     ELSE
  2329.       VOID BIOS(3,2,27)                 ! Print chr$(27);"A";
  2330.       VOID BIOS(3,2,65)
  2331.     ENDIF
  2332.   ENDIF
  2333.   IF reinvt%=69                         ! "D" CR/LF
  2334.     IF CRSLIN=25
  2335.       VOID BIOS(3,2,27)                 ! Print At(1,2); (cur home)
  2336.       VOID BIOS(3,2,89)
  2337.       VOID BIOS(3,2,33)
  2338.       VOID BIOS(3,2,32)
  2339.       VOID BIOS(3,2,27)                 ! Print Chr$(27);"M";
  2340.       VOID BIOS(3,2,77)
  2341.       VOID BIOS(3,2,27)                 ! Print At(1,25);
  2342.       VOID BIOS(3,2,89)
  2343.       VOID BIOS(3,2,32+25)
  2344.       VOID BIOS(3,2,32)
  2345.     ELSE
  2346.       VOID BIOS(3,2,10)
  2347.       VOID BIOS(3,2,13)
  2348.     ENDIF
  2349.   ENDIF
  2350.   IF reinvt%=90                         ! "Z" Request Terminal Type
  2351.     @rep_vt100
  2352.   ENDIF
  2353. RETURN
  2354. '
  2355. PROCEDURE rep_vt100
  2356.   IF vt100!
  2357.     VOID BIOS(3,1,27)
  2358.     VOID BIOS(3,1,91)
  2359.     VOID BIOS(3,1,63)
  2360.     VOID BIOS(3,1,49)
  2361.     VOID BIOS(3,1,59)
  2362.     VOID BIOS(3,1,48)
  2363.     VOID BIOS(3,1,99)
  2364.   ENDIF
  2365. RETURN
  2366. '
  2367. PROCEDURE sequenz(reinan%,len%)                   ! Esc-chr$(91)-Sequenz:
  2368.   LOCAL cnt%,cl,pl%,pl1%,pl2%,dpl!,pc%,pc1%,pc2%,dpc!
  2369.   ' -------------------- Speziell VT100 ---------------------------------------
  2370.   IF reinan%=110
  2371.     IF len%=2
  2372.       IF PEEK(seq%)=54                            ! "6n" - Request for
  2373.         '                                                  cur pos report
  2374.         dpl!=FALSE
  2375.         cl=CRSLIN-1
  2376.         IF cl<10
  2377.           pl%=cl+48
  2378.         ELSE
  2379.           dpl!=TRUE
  2380.           pl%=INT(cl/10)
  2381.           pl1%=pl%+48
  2382.           pl2%=cl-(pl%*10)+48
  2383.         ENDIF
  2384.         dpc!=FALSE
  2385.         IF CRSCOL<10
  2386.           pc%=CRSCOL+48
  2387.         ELSE
  2388.           dpc!=TRUE
  2389.           pc%=INT(CRSCOL/10)
  2390.           pc1%=pc%+48
  2391.           pc2%=CRSCOL-(pc%*10)+48
  2392.         ENDIF
  2393.         '
  2394.         VOID BIOS(3,1,27)
  2395.         VOID BIOS(3,1,91)
  2396.         IF NOT dpl!
  2397.           VOID BIOS(3,1,pl%)
  2398.         ELSE
  2399.           VOID BIOS(3,1,pl1%)
  2400.           VOID BIOS(3,1,pl2%)
  2401.         ENDIF
  2402.         VOID BIOS(3,1,59)
  2403.         IF NOT dpc!
  2404.           VOID BIOS(3,1,pc%)
  2405.         ELSE
  2406.           VOID BIOS(3,1,pc1%)
  2407.           VOID BIOS(3,1,pc2%)
  2408.         ENDIF
  2409.         VOID BIOS(3,1,82)
  2410.       ENDIF
  2411.     ENDIF
  2412.   ENDIF
  2413.   IF reinan%=99                                   ! "c" oder "0c" is it VT100?
  2414.     @rep_vt100
  2415.   ENDIF
  2416.   IF reinan%=104                                  ! "h" cursor keys in applications mode
  2417.     vt_capp!=TRUE
  2418.   ENDIF
  2419.   IF reinan%=108                                  ! "l" cursor keys in positioning mode
  2420.     vt_capp!=FALSE
  2421.   ENDIF
  2422.   ' -------------------- ANSI -------------------------------------------------
  2423.   IF reinan%=109                                  ! Wenn es ein "m" war
  2424.     IF len%=1                                     ! Wenn nur "m"
  2425.       VOID BIOS(3,2,27)                           ! Print Chr$(27);"q";
  2426.       VOID BIOS(3,2,113)                          ! (normal video)
  2427.       sonder!=FALSE                               ! keine Sondercharakter
  2428.     ENDIF
  2429.     IF len%=2                                     ! Wenn "nm"
  2430.       IF PEEK(seq%)=48                            ! Wenn "0m"
  2431.         VOID BIOS(3,2,27)                         ! Print Chr$(27);"q";
  2432.         VOID BIOS(3,2,113)                        ! (normal video)
  2433.         sonder!=FALSE                             ! Keine Sondercharakter
  2434.       ENDIF
  2435.       IF PEEK(seq%)=52                            ! Wenn "4m"
  2436.         sonder!=TRUE                              ! Sondercharakter
  2437.         DEFTEXT 1,8,0,13                          ! 8 (underline)
  2438.       ENDIF
  2439.       IF PEEK(seq%)=49                            ! Wenn "1m"
  2440.         sonder!=TRUE                              ! Sondercharakter
  2441.         DEFTEXT 1,1,0,13                          ! 1 (fett)
  2442.       ENDIF
  2443.       IF PEEK(seq%)=53                            ! Wenn "5m"
  2444.         sonder!=TRUE                              ! Sondercharakter
  2445.         DEFTEXT 1,2,0,13                          ! 2 (hell)
  2446.       ENDIF
  2447.       IF PEEK(seq%)=55                            ! Wenn "7m"
  2448.         VOID BIOS(3,2,27)                         ! Print Chr$(27);"p";
  2449.         VOID BIOS(3,2,112)                        ! (inverse video)
  2450.       ENDIF
  2451.     ENDIF
  2452.   ENDIF
  2453.   IF reinan%=115                             ! Wenn "s"
  2454.     VOID BIOS(3,2,27)                        ! Print Chr$(27);"j";
  2455.     VOID BIOS(3,2,106)                       ! (curpos sichern)
  2456.   ENDIF
  2457.   IF reinan%=117                             ! Wenn "u"
  2458.     VOID BIOS(3,2,27)                        ! Print Chr$(27);"k";
  2459.     VOID BIOS(3,2,107)                       ! (curpos wieder herstellen)
  2460.   ENDIF
  2461.   IF reinan%=72 OR reinan%=102               ! Wenn es "H" oder "f" war:
  2462.     IF len%=1                                ! Wenn nur "H" oder "f"
  2463.       VOID BIOS(3,2,27)                      ! Print At(1,2); (curhome)
  2464.       VOID BIOS(3,2,89)
  2465.       VOID BIOS(3,2,33)
  2466.       VOID BIOS(3,2,32)
  2467.     ENDIF
  2468.     IF len%=2                                ! Wenn es ";H" oder ";f" war:
  2469.       IF PEEK(seq%)=59
  2470.         VOID BIOS(3,2,27)                    ! Print At(2,3);
  2471.         VOID BIOS(3,2,89)
  2472.         VOID BIOS(3,2,34)
  2473.         VOID BIOS(3,2,33)
  2474.       ENDIF
  2475.     ENDIF
  2476.     ' +-----------------------------------------------------------------------+
  2477.     ' | Max = Der jeweils hoehere Wert in der Klammer; muss, damit der Cursor |
  2478.     ' | nicht in die Topleiste (Zeile 1 des VT52-Schirms) oder sonstwo ueber  |
  2479.     ' | den Rand hinauslaeuft.                                                |
  2480.     ' +-----------------------------------------------------------------------+
  2481.     IF len%=3                                ! Wenn es "n;H" oder ";nH" war:
  2482.       IF PEEK(seq%+1)=59                     ! Wenn "n;H"
  2483.         '                                +------------------------------------+
  2484.         LET set_y%=MAX(32,PEEK(seq%)-17) !Umrechnung: Geholt mit Peek wird die|
  2485.         VOID BIOS(3,2,27)                !ASCII-Nummer des Zeichens (Zahl).   |
  2486.         VOID BIOS(3,2,89)                !Die Nummer minus 48 ergibt den Wert.|
  2487.         VOID BIOS(3,2,set_y%+1)          !In der VT52-Sequenz "Esc-Y-zl-cl"   |
  2488.         VOID BIOS(3,2,32)                !muss zu diesem Wert wieder 31 ad-   |
  2489.       ENDIF                              !diert werden. Daher: Schon beim Ho- |
  2490.       '                                  !len mit Peek nur 17 subtrahieren    |
  2491.       '                                  !(48-31=17). Mit Max wird sicherge-  |
  2492.       '                                  !stellt, dass die VT52-Sequenz min.  |
  2493.       '                                  !32 erhaelt, weil sonst der Cursor   |
  2494.       '                                  !auf Zeile 0 oder Spalte 0 gesetzt   |
  2495.       '                                  !wuerde. Schliesslich muss bei der   |
  2496.       '                                  !Zeilenangabe stets 1 addiert werden,|
  2497.       '                                  !weil die oberste Zeile des omnibus2-|
  2498.       '                                  !Bildschirms die Zeile 2 des VT52-   |
  2499.       '                                  !Emulators ist.                      |
  2500.       '                                  +------------------------------------+
  2501.       IF PEEK(seq%)=59                       ! Wenn ";nH"
  2502.         LET set_x%=MAX(32,PEEK(seq%+1)-17)
  2503.         VOID BIOS(3,2,27)                    ! Print At(Set_x%,2);
  2504.         VOID BIOS(3,2,89)
  2505.         VOID BIOS(3,2,33)
  2506.         VOID BIOS(3,2,set_x%)
  2507.       ENDIF
  2508.     ENDIF
  2509.     IF len%=4
  2510.       IF PEEK(seq%+1)=59                       ! Wenn "n;nH":
  2511.         LET set_y%=MAX(32,PEEK(seq%)-17)       ! n als Parameter
  2512.         LET set_x%=MAX(32,PEEK(seq%+2)-17)     ! uebernehmen
  2513.         VOID BIOS(3,2,27)                      ! Print At(Set_x%,Set_y%+1);
  2514.         VOID BIOS(3,2,89)
  2515.         VOID BIOS(3,2,set_y%+1)
  2516.         VOID BIOS(3,2,set_x%)
  2517.       ENDIF
  2518.       '      +---------------------------------------------------------------+
  2519.       '      |Wenn zwei Zahlen uebergeben werden (";nnH" etc.), ist die Um-  |
  2520.       '      |rechnung: Erste ASCII-Nummer minus 48 (gibt Wert), mal 10 plus |
  2521.       '      |zweite ASCII-Nummer minus 48 (gibt Wert).                      |
  2522.       '      +---------------------------------------------------------------+
  2523.       '
  2524.       IF PEEK(seq%)=59                         ! Wenn ";nnH":
  2525.         LET set_x%=(PEEK(seq%+1)-48)*10+PEEK(seq%+2)-48
  2526.         VOID BIOS(3,2,27)                      ! Print At(Set_x%,2);
  2527.         VOID BIOS(3,2,89)
  2528.         VOID BIOS(3,2,33)
  2529.         VOID BIOS(3,2,31+MAX(1,set_x%))        ! Max im Falle dass 00
  2530.       ENDIF
  2531.       IF PEEK(seq%+2)=59                       ! Wenn "nn;H":
  2532.         LET set_y%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48
  2533.         VOID BIOS(3,2,27)                      ! Print At(1,Set_y%);
  2534.         VOID BIOS(3,2,89)
  2535.         VOID BIOS(3,2,31+MAX(2,set_y%+1))      ! Max im Falle dass 00 oder 01
  2536.         VOID BIOS(3,2,32)
  2537.       ENDIF
  2538.     ENDIF
  2539.     IF len%=5                                ! Wenn "n;nnH" oder "nn;nH" bzw. f
  2540.       IF PEEK(seq%+1)=59                     ! Wenn "n;nnH" oder "n;nnf"
  2541.         LET set_y%=MAX(32,PEEK(seq%)-17)     ! n und nn als Parameter...
  2542.         LET set_x%=(PEEK(seq%+2)-48)*10+PEEK(seq%+3)-48
  2543.         VOID BIOS(3,2,27)                    ! Print At(Set_x%,Set_y%+1);
  2544.         VOID BIOS(3,2,89)
  2545.         VOID BIOS(3,2,set_y%+1)
  2546.         VOID BIOS(3,2,31+MAX(1,set_x%))
  2547.       ENDIF
  2548.       IF PEEK(seq%+2)=59                     ! Wenn "nn;nH" oder "nn;nf"
  2549.         LET set_y%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48
  2550.         LET set_x%=MAX(32,PEEK(seq%+3)-17)
  2551.         VOID BIOS(3,2,27)                    ! Print At(Set_x%,Set_y%+1);
  2552.         VOID BIOS(3,2,89)
  2553.         VOID BIOS(3,2,31+MAX(2,set_y%+1))
  2554.         VOID BIOS(3,2,set_x%)
  2555.       ENDIF
  2556.     ENDIF
  2557.     IF len%=6                                ! Wenn "nn;nnH" oder "nn;nnf"
  2558.       LET set_y%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48
  2559.       LET set_x%=(PEEK(seq%+3)-48)*10+PEEK(seq%+4)-48
  2560.       VOID BIOS(3,2,27)                      ! Print At(Set_x%,Set_y%+1);
  2561.       VOID BIOS(3,2,89)
  2562.       VOID BIOS(3,2,31+MAX(2,set_y%+1))
  2563.       VOID BIOS(3,2,31+MAX(1,set_x%))
  2564.     ENDIF
  2565.   ENDIF
  2566.   '
  2567.   IF reinan%=74                              ! Wenn es ein "J" war:
  2568.     IF len%=1                                ! Wenn "J" alleine
  2569.       VOID BIOS(3,2,27)                      ! Print Chr$(27);"J";
  2570.       VOID BIOS(3,2,74)                      ! Von curpos bis screenend del
  2571.     ELSE                                     ! Wenn mehr als nur "J"
  2572.       IF PEEK(seq%)=48                       ! Wenn "0J"
  2573.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"J";
  2574.         VOID BIOS(3,2,74)                    ! Von curpos bis screenend del
  2575.       ENDIF
  2576.       IF PEEK(seq%)=49                       ! Wenn "1J"
  2577.         l_posy%=CRSLIN            ! Y-pos sichern
  2578.         VOID BIOS(3,2,27)         ! Print Chr$(27);"j";
  2579.         VOID BIOS(3,2,106)        ! (curpos sichern)
  2580.         VOID BIOS(3,2,27)         ! Print Chr$(27);"f";
  2581.         VOID BIOS(3,2,102)        ! (cur ausschalten,
  2582.         VOID BIOS(3,2,27)         ! Print At(1,2);
  2583.         VOID BIOS(3,2,89)
  2584.         VOID BIOS(3,2,33)
  2585.         VOID BIOS(3,2,32)
  2586.         FOR loesch%=2 TO l_posy%-1! von curhome bis Zeile, in der Cursor steht,
  2587.           VOID BIOS(3,2,27)       ! Print At(1,Loesch%);
  2588.           VOID BIOS(3,2,89)
  2589.           VOID BIOS(3,2,31+loesch%)
  2590.           VOID BIOS(3,2,32)
  2591.           VOID BIOS(3,2,27)       ! Print Chr$(27);"K";
  2592.           VOID BIOS(3,2,75)       ! (Zeile loeschen)
  2593.         NEXT loesch%
  2594.         VOID BIOS(3,2,27)         ! Print Chr$(27);"k";
  2595.         VOID BIOS(3,2,107)        ! curpos wiederherstellen
  2596.         VOID BIOS(3,2,27)         ! Print Chr$(27);"o";
  2597.         VOID BIOS(3,2,111)        ! bis Anfang dieser Zeile del
  2598.         VOID BIOS(3,2,27)         ! Print Chr$(27);"e";
  2599.         VOID BIOS(3,2,101)        ! cur einschalten)
  2600.       ENDIF
  2601.       IF PEEK(seq%)=50                       ! Wenn "2J"
  2602.         VOID BIOS(3,2,27)         ! Print Chr$(27);"f";
  2603.         VOID BIOS(3,2,102)        ! (cur aus)
  2604.         VOID BIOS(3,2,27)         ! Print At(1,2); (cur home)
  2605.         VOID BIOS(3,2,89)
  2606.         VOID BIOS(3,2,33)
  2607.         VOID BIOS(3,2,32)
  2608.         VOID BIOS(3,2,27)         ! Print Chr$(27);"J";
  2609.         VOID BIOS(3,2,74)         ! bis screenend loeschen
  2610.         VOID BIOS(3,2,27)         ! Print Chr$(27);"e";
  2611.         VOID BIOS(3,2,101)        ! (cur ein)
  2612.       ENDIF
  2613.     ENDIF
  2614.   ENDIF
  2615.   IF reinan%=75                              ! Wenn es ein "K" war:
  2616.     IF len%=1                                ! Wenn nur "K"
  2617.       VOID BIOS(3,2,27)                      ! Print Chr$(27);"K";
  2618.       VOID BIOS(3,2,75)                      ! Bis Zeilenende loeschen
  2619.     ELSE                                     ! Andernfalls...
  2620.       IF PEEK(seq%)=48                       ! Wenn "0K"
  2621.         VOID BIOS(3,2,27)                      ! Print Chr$(27);"K";
  2622.         VOID BIOS(3,2,75)                      ! Bis Zeilenende loeschen
  2623.       ENDIF
  2624.       IF PEEK(seq%)=49                       ! Wenn "1K"
  2625.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"o";
  2626.         VOID BIOS(3,2,111)                   ! Bis Zeilenanfang loeschen
  2627.       ENDIF
  2628.       IF PEEK(seq%)=50                       ! Wenn "2K"
  2629.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"j";
  2630.         VOID BIOS(3,2,106)                   ! (curpos sichern)
  2631.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"M";
  2632.         VOID BIOS(3,2,77)                    ! (Ganze Zeile del, scroll Rest)
  2633.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"k";
  2634.         VOID BIOS(3,2,107)                   ! (curspos wiederherstellen)
  2635.       ENDIF
  2636.     ENDIF
  2637.   ENDIF
  2638.   IF reinan%=65                              ! Wenn "A" (cur rauf)
  2639.     IF len%=1                                ! Wenn nur "A"
  2640.       INC len%                               ! Mache "1A" daraus
  2641.       POKE seq%,49     !(eleganter waere ein Double!)
  2642.       POKE seq%+1,65
  2643.     ENDIF
  2644.     IF len%=2                                ! Wenn nur eine Zahl vor "A"
  2645.       auf%=PEEK(seq%)-48                     ! Diese Zahl=Anzahl Bewegungen
  2646.       FOR aufi%=1 TO auf%                    ! cur bewegen
  2647.         EXIT IF CRSLIN=2                     ! ausser, er ist ganz oben
  2648.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"A";
  2649.         VOID BIOS(3,2,65)
  2650.       NEXT aufi%
  2651.     ELSE                                     ! Wenn mehr (zwei) Zahlen vor "A"
  2652.       LET auf%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48 ! Anzahl der Bewegungen
  2653.       FOR aufi%=1 TO auf%                    ! cur bewegen
  2654.         EXIT IF CRSLIN=2                     ! ausser, er ist ganz oben
  2655.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"A";
  2656.         VOID BIOS(3,2,65)
  2657.       NEXT aufi%
  2658.     ENDIF
  2659.   ENDIF
  2660.   IF reinan%=66                              ! Wenn "B" (cur runter)
  2661.     IF len%=1
  2662.       INC len%
  2663.       POKE seq%,49
  2664.       POKE seq%+1,66
  2665.     ENDIF
  2666.     IF len%=2                                ! Wenn nur eine Zahl vor "B"
  2667.       ab%=PEEK(seq%)-48                      ! Diese Zahl=Anzahl Bewegungen
  2668.       FOR abi%=1 TO ab%                      ! cur bewegen
  2669.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"B";
  2670.         VOID BIOS(3,2,66)
  2671.       NEXT abi%
  2672.     ELSE                                     ! Wenn mehr Zahlen vor "B"
  2673.       LET ab%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48 ! Anzahl der Bewegungen
  2674.       FOR abi%=1 TO ab%                      ! cur bewegen
  2675.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"B";
  2676.         VOID BIOS(3,2,66)
  2677.       NEXT abi%
  2678.     ENDIF
  2679.   ENDIF
  2680.   IF reinan%=67                              ! Wenn "C" (cur rechts)
  2681.     IF len%=1
  2682.       INC len%
  2683.       POKE seq%,49
  2684.       POKE seq%+1,67
  2685.     ENDIF
  2686.     IF len%=2                                ! Wenn nur eine Zahl vor "C"
  2687.       recht%=PEEK(seq%)-48                   ! Diese Zahl=Anzahl Bewegungen
  2688.       FOR rechti%=1 TO recht%                ! cur bewegen
  2689.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"C";
  2690.         VOID BIOS(3,2,67)
  2691.       NEXT rechti%
  2692.     ELSE                                     ! Wenn mehr Zahlen vor "C"
  2693.       LET recht%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48 ! Anzahl der Bewegungen
  2694.       FOR rechti%=1 TO recht%                ! cur bewegen
  2695.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"C";
  2696.         VOID BIOS(3,2,67)
  2697.       NEXT rechti%
  2698.     ENDIF
  2699.   ENDIF
  2700.   IF reinan%=68                              ! Wenn "D" (cur links)
  2701.     IF len%=1
  2702.       INC len%
  2703.       POKE seq%,49
  2704.       POKE seq%+1,68
  2705.     ENDIF
  2706.     IF len%=2                                ! Wenn nur eine Zahl vor "D"
  2707.       link%=PEEK(seq%)-48                    ! Diese Zahl=Anzahl Bewegungen
  2708.       FOR linki%=1 TO link%                  ! cur bewegen
  2709.         EXIT IF CRSCOL=1                     ! ausser er ist ganz links
  2710.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"D";
  2711.         VOID BIOS(3,2,68)
  2712.       NEXT linki%
  2713.     ELSE                                     ! Wenn mehr Zahlen vor "D"
  2714.       LET link%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48 ! Anzahl der Bewegungen
  2715.       FOR linki%=1 TO link%                  ! cur bewegen
  2716.         EXIT IF CRSCOL=1                     ! ausser er ist ganz links
  2717.         VOID BIOS(3,2,27)                    ! Print Chr$(27);"D";
  2718.         VOID BIOS(3,2,68)
  2719.       NEXT linki%
  2720.     ENDIF
  2721.   ENDIF
  2722.   CLR reinan$,bb$
  2723. RETURN
  2724. '
  2725. ' #############################################################################
  2726. PROCEDURE pr_grafik(zeichen%)                      ! Grafikzeichen ausgeben
  2727.   IF zeichen%>223                                  ! Grafiksatz begrenzen
  2728.     IF zeichen%=254                                ! Ausnahme: Char 254
  2729.       VOID BIOS(3,2,27)                            ! Print Chr$(27)+"f";
  2730.       VOID BIOS(3,2,102)                           ! Cursor aus
  2731.       PUT (CRSCOL-1)*8,(CRSLIN-1)*16,ansi$(49)     ! Char 254 ausgeben
  2732.       VOID BIOS(3,2,27)                            ! Print Chr$(27)+"C";
  2733.       VOID BIOS(3,2,67)                            ! Cur eins nach rechts
  2734.       VOID BIOS(3,2,27)                            ! Print Chr$(27)+"e";
  2735.       VOID BIOS(3,2,101)                           ! Cursor einschalten
  2736.     ELSE                                           ! Nicht Grafiksatz
  2737.       VOID BIOS(3,2,zeichen%)                      ! Normale Ausgabe
  2738.     ENDIF
  2739.   ELSE                                             ! Grafiksatz
  2740.     VOID BIOS(3,2,27)                              ! Print Chr$(27)+"f";
  2741.     VOID BIOS(3,2,102)                             ! Cursor aus
  2742.     PUT (CRSCOL-1)*8,(CRSLIN-1)*16,ansi$(zeichen%-175)
  2743.     VOID BIOS(3,2,27)                              ! Print Chr$(27)+"C";
  2744.     VOID BIOS(3,2,67)                              ! Cur eins nach rechts
  2745.     VOID BIOS(3,2,27)                              ! Print Chr$(27)+"e";
  2746.     VOID BIOS(3,2,101)                             ! Cursor einschalten
  2747.   ENDIF
  2748. RETURN
  2749. '
  2750. PROCEDURE pr_art(reinart%)                         ! Sonderschrift ausgeben
  2751.   VOID BIOS(3,2,27)                                ! Print Chr$(27)+"f";
  2752.   VOID BIOS(3,2,102)                               ! Cursor aus
  2753.   TEXT (CRSCOL-1)*8,((CRSLIN-1)*16)+13,CHR$(reinart%)
  2754.   VOID BIOS(3,2,27)                                ! Print Chr$(27)+"C";
  2755.   VOID BIOS(3,2,67)                                ! Cur eins nach rechts
  2756.   VOID BIOS(3,2,27)                                ! Print Chr$(27)+"e";
  2757.   VOID BIOS(3,2,101)                               ! Cursor einschalten
  2758. RETURN
  2759. '
  2760. PROCEDURE show_action(show_txt$)                   ! Informationsausgabe
  2761.   IF LEN(show_txt$)>32
  2762.     LET show_txt$=LEFT$(show_txt$,32)
  2763.   ENDIF
  2764.   DEFFILL 1,2,8
  2765.   PBOX 382,0,640,14
  2766.   DEFFILL 1,0,0
  2767.   DEFTEXT 1,0,0,6
  2768.   GRAPHMODE 3
  2769.   TEXT 640-(LEN(show_txt$))*8,10,show_txt$
  2770.   GRAPHMODE 1
  2771.   DEFTEXT 1,0,0,13
  2772. RETURN
  2773. '
  2774. PROCEDURE show_top(term$,speed$,bits$,parity$,stop$)
  2775.   GRAPHMODE 3
  2776.   DEFTEXT 1,0,0,6
  2777.   TEXT 86,10,term$                            ! Terminal
  2778.   TEXT 178,10,speed$                          ! Speed
  2779.   TEXT 210+4,10,bits$                         ! Bits
  2780.   TEXT 218+4,10,parity$                       ! Parity
  2781.   TEXT 226+4,10,stop$                         ! Stopbit
  2782.   DEFTEXT 1,0,0,13
  2783.   GRAPHMODE 1
  2784. RETURN
  2785. '
  2786. PROCEDURE conf_rs(eins%,zwei%,drei%)
  2787.   '
  2788.   VOID XBIOS(15,eins%,zwei%,drei%,-1,-1,-1)
  2789.   '
  2790.   ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
  2791.   ' Die RS232-Schnittstelle wird mittels der Xbios-Funktion Nr. 15 einge-     |
  2792.   ' stellt (in C: Rsconf). Diese Funktion wiederum konfiguriert die RS232     |
  2793.   ' hardwaremaessig ueber den Special Chip MFP 68901.                         |
  2794.   '                                                                           |
  2795.   ' Der Funktion koennen bis zu sechs Parameter uebergeben werden, aber nur   |
  2796.   ' die ersten drei sind notwendig. An die restlichen drei wird -1 uebergeben,|
  2797.   ' was "keine Veraenderung" bedeutet.                                        |
  2798.   '                                                                           |
  2799.   ' Alle Parameter werden in integer-Werten uebergeben (%)                    |
  2800.   '                                                                           |
  2801.   ' Der erste Parameter gibt die Baud-Rate an: 1 = 9600 Baud                  |
  2802.   '                                            2 = 4800 Baud                  |
  2803.   '                                            4 = 2400 Baud                  |
  2804.   '                                            7 = 1200 Baud                  |
  2805.   '                                            8 =  600 Baud                  |
  2806.   '                                            9 =  300 Baud                  |
  2807.   '                                                                           |
  2808.   ' Der zweite Parameter das Handshake: 0 = Kein Handshake (Normalzustand)    |
  2809.   '                                     1 = Xon/Xoff                          |
  2810.   '                                     2 = RTS/CTS                           |
  2811.   '                                                                           |
  2812.   ' Der dritte Parameter stellt die Parity, die Anzahl Start- und Stopbits    |
  2813.   ' und die Anzahl Datenbits ein.                                             |
  2814.   ' Dieser Parameter ist der komplizierteste, denn er muss aus einer Integer  |
  2815.   ' bestehen, die in binaerer Form einen 8-bit-Wert (1 Byte) ergibt, dessen   |
  2816.   ' einzelne Bits alle drei Parameter-Teilwerte ergeben.                      |
  2817.   '                                                                           |
  2818.   ' Folgendes Schema zum Umrechnen von binaer/dezimal-Werten hat sich be-     |
  2819.   ' waehrt:                                                                   |
  2820.   '                                                                           |
  2821.   '    128      64      32      16      8       4       2       1             |
  2822.   ' -----------------------------------------------------------------         |
  2823.   ' | bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |         |
  2824.   ' -----------------------------------------------------------------         |
  2825.   '                                                                           |
  2826.   ' Ueber jedem Bit der 8-bit-binaer-Zahl steht die Wertigkeit; fuer jedes    |
  2827.   ' Bit, das 1 ist, wird die Wertigkeit zur Dezimal-Integer gezaehlt. Zum     |
  2828.   ' Beispiel:                                                                 |
  2829.   '                                                                           |
  2830.   ' Die Dezimal-Integer 8+128 (136) ergibt binaer 10001000                    |
  2831.   '                                                                           |
  2832.   ' denn bit 7 ist 1 ("gesetzt") und ebenso bit 3, sie haben die Wertigkeit   |
  2833.   ' 128 bzw. 8, also ist der Dezimalwert von 10001000 8+128=136.              |
  2834.   '                                                                           |
  2835.   ' Folgende Bits des dritten Parameters in Xbios(15) ergeben folgende Ein-   |
  2836.   ' stellungen:                                                               |
  2837.   '                                                                           |
  2838.   ' Bit 7:            Immer gesetzt (1), also dezimal +128                    |
  2839.   ' Bit 6 und Bit 5:  0 und 0 = 8 Datenbits                                   |
  2840.   '                   0 und 1 = 7 Datenbits  (dezimal +32)                    |
  2841.   '                   1 und 0 = 6 Datenbits  (dezimal +64)                    |
  2842.   ' Bit 4 und Bit 3:  0 und 1 = 1 Stopbit    (dezimal +8)                     |
  2843.   '                   1 und 1 = 2 Stopbits   (dezimal +8+16)                  |
  2844.   ' Bit 2:            0 = No Parity                                           |
  2845.   '                   1 = Parity so, wie in Bit 1 angegeben (dezimal +4)      |
  2846.   ' Bit 1:            0 = Parity Odd                                          |
  2847.   '                   1 = Parity Even                       (dezimal +2)      |
  2848.   ' Bit 0:            Immer 0                                                 |
  2849.   '                                                                           |
  2850.   ' Ein paar Beispiele:                                                       |
  2851.   '                                                                           |
  2852.   ' Dezimal 8+32+128     ==> binaer 10101000 ==> 7N1                          |
  2853.   ' Dezimal 2+4+8+32+128 ==> binaer 10101110 ==> 7E1                          |
  2854.   ' Dezimal 2+4+8+128    ==> binaer 10001110 ==> 8E1                          |
  2855.   '                                                                           |
  2856.   ' Um die RS232 auf 1200 Baud, kein Handshake und 8N1 einzustellen schreibt  |
  2857.   ' man infolge dessen:                                                       |
  2858.   '                                                                           |
  2859.   ' Void Xbios(15,7,0,8+128,-1,-1,-1)                                         |
  2860.   '                                                                           |
  2861.   ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
  2862.   '
  2863. RETURN
  2864. '
  2865. PROCEDURE modem                                         ! Modem-Abfrage
  2866.   ' Wenn "CONNEC" oder "connec" nach dem letzten Return:
  2867.   IF (LPEEK(mod%)=1129270862 AND DPEEK(mod%+4)=17731) OR (LPEEK(mod%)=1668247150 AND DPEEK(mod%+4)=25955)
  2868.     static!=FALSE
  2869.     @show_action("On line")
  2870.     IF capton!=TRUE
  2871.       @show_capt(c_s%)
  2872.     ELSE
  2873.       @show_capt(0)
  2874.     ENDIF
  2875.   ENDIF
  2876.   ' Wenn "NO CAR" oder "no car" nach dem letzten Return:
  2877.   IF (LPEEK(mod%)=1313808451 AND DPEEK(mod%+4)=16722) OR (LPEEK(mod%)=1852776547 AND DPEEK(mod%+4)=24946)
  2878.     ' +-----------------------------------------+
  2879.     ' |Alles wieder auf Standard zurueckstellen:|
  2880.     ' +-----------------------------------------+
  2881.     static!=TRUE
  2882.     @conf_rs(std_baud%,std_hands%,std_ucr%)
  2883.     PAUSE 5
  2884.     DEFFILL 1,2,8
  2885.     PBOX 85,0,126,14
  2886.     PBOX 174,0,239,14
  2887.     PBOX 242,0,302,14
  2888.     DEFFILL 1,0,0
  2889.     @show_top(std_term$,std_speed$,std_bits$,std_parity$,std_stop$)
  2890.     @get_log
  2891.     @show_action("Off line - Static")
  2892.   ENDIF
  2893. RETURN
  2894. '
  2895. PROCEDURE drucken
  2896.   LOCAL len$,handle%,einhol%,anz%,is%,d_z%,show%,show$,fehler%
  2897.   @fselbox("","Print",FALSE)
  2898.   IF fs_frgt!
  2899.   ELSE
  2900.     HIDEM
  2901.     @rsrc_gaddr(0,14,*adresse%,*ret)               ! Zaehler-Schildchen
  2902.     @draw_form
  2903.     '    LPRINT CHR$(27)+"R"+CHR$(2);                   ! Drucker auf Deutsch
  2904.     LPRINT CHR$(27)+"R"+CHR$(0);                   ! Drucker auf Amerikanisch
  2905.     OPEN "I",#77,treatfile$                        ! Dateilaenge ermitteln
  2906.     TEXT 34*8-1,10*16+10-3,"Dateilänge:"           ! und anzeigen
  2907.     len$=STR$(LOF(#77))
  2908.     PRINT AT(41-LEN(len$),12);len$
  2909.     CLOSE #77
  2910.     PRINT AT(33,16);
  2911.     OUT 5,2
  2912.     '
  2913.     CLR show%
  2914.     handle%=GEMDOS(&H3D,L:VARPTR(treatfile$),0)
  2915.     REPEAT
  2916.       einhol%=GEMDOS(&H3F,handle%,L:512,L:puff%)
  2917.       IF einhol%=512
  2918.         anz%=512
  2919.       ELSE
  2920.         anz%=einhol%-1
  2921.       ENDIF
  2922.       ADD show%,anz%
  2923.       show$=STR$(show%)
  2924.       PRINT AT(41-LEN(show$),16);show$
  2925.       FOR is%=puff% TO puff%+anz%
  2926.         d_z%=PEEK(is%)
  2927.         '
  2928.         ' Umlaute und Sonderzeichen in entsprechende Druckerzeichen wandeln:
  2929.         '
  2930.         '        IF d_z=225    ! Doppel-S
  2931.         '        d_z%=126
  2932.         '      ENDIF
  2933.         '        IF d_z%=132   ! Umlaut a
  2934.         '        d_z%=123
  2935.         '      ENDIF
  2936.         '        IF d_z%=148   ! Umlaut o
  2937.         '        d_z%=124
  2938.         '      ENDIF
  2939.         '        IF d_z%=129   ! Umlaut u
  2940.         '        d_z%=125
  2941.         '      ENDIF
  2942.         '        IF d_z%=142   ! Umlaut A
  2943.         '        d_z%=91
  2944.         '      ENDIF
  2945.         '        IF d_z%=153   ! Umlaut O
  2946.         '        d_z%=92
  2947.         '      ENDIF
  2948.         '        IF d_z%=154   ! Umlaut U
  2949.         '        d_z%=93
  2950.         '      ENDIF
  2951.         VOID GEMDOS(&H5,d_z%)
  2952.       NEXT is%
  2953.     UNTIL einhol%<>512
  2954.     fehler%=GEMDOS(&H3E,handle%)
  2955.     SHOWM
  2956.   ENDIF
  2957. RETURN
  2958. '
  2959. PROCEDURE sichern
  2960.   IF wp_down!=TRUE
  2961.     @sav_wp
  2962.   ELSE
  2963.     @sav_asc
  2964.   ENDIF
  2965. RETURN
  2966. '
  2967. PROCEDURE sav_wp
  2968.   LOCAL cnt%,captfile$,len$,snd%,cnt_wp%,cnt_show%,swp_z%
  2969.   cnt%=count_capt%-capt%
  2970.   @fselbox("","Save 1stWord file",FALSE)
  2971.   IF fs_frgt!
  2972.   ELSE
  2973.     @rsrc_gaddr(0,14,*adresse%,*ret)
  2974.     @draw_form
  2975.     TEXT 33*8-1,10*16+10-3,"Bytes in CPT:"
  2976.     len$=STR$(cnt%)
  2977.     PRINT AT(41-LEN(len$),12);len$
  2978.     PRINT AT(34,16);"Wandle Datei..."
  2979.     cnt_wp%=capt%
  2980.     IF cnt%<1
  2981.       PRINT AT(34,16);"CPT ist leer!"
  2982.       FOR snd%=1 TO 3
  2983.         SOUND 1,15,5,3
  2984.         WAVE 1,1,11,444,30
  2985.       NEXT snd%
  2986.       SOUND 1,0,0,0,0
  2987.       GOTO s_schluss
  2988.     ENDIF
  2989.     REPEAT
  2990.       swp_z%=PEEK(cnt_wp%)
  2991.       IF swp_z%=32
  2992.         POKE cnt_wp%,30
  2993.       ENDIF
  2994.       INC cnt_wp%
  2995.     UNTIL cnt_wp%=count_capt%
  2996.     PRINT AT(34,16);"Speichere...   "
  2997.     BSAVE treatfile$,capt%,cnt%
  2998.     count_capt%=capt%
  2999.     c_s%=100
  3000.     CLR c_ss%,cnt%
  3001.   ENDIF
  3002.   s_schluss:
  3003. RETURN
  3004. '                                            +--------------------------------+
  3005. PROCEDURE sav_asc                            !Speichern mit dem Befehl BSAVE: !
  3006.   LOCAL cnt%,captfile$ !                     +--------------------------------+
  3007.   cnt%=count_capt%-capt%                     !Cnt%=Laenge des benutzten Blocks
  3008.   @fselbox("","Save",FALSE)
  3009.   IF fs_frgt!
  3010.   ELSE
  3011.     HIDEM
  3012.     @rsrc_gaddr(0,15,*adresse%,*ret)
  3013.     @draw_form
  3014.     BSAVE treatfile$,capt%,cnt% ! Anfang (Capt%) Anzahl (Cnt%) in einem Rutsch
  3015.     count_capt%=capt%                        ! Alles zurueckstellen,
  3016.     c_s%=100                                 ! Capture beginnt neu
  3017.     CLR c_ss%
  3018.     CLR cnt%
  3019.     SHOWM
  3020.   ENDIF
  3021. RETURN
  3022. '
  3023. PROCEDURE senden                                   ! Senden
  3024.   LOCAL ck_str%,handle%,einhol%,anz%,is%,s_z%,rein%,fehler%
  3025.   @fselbox("","Send text (or ANSI)",TRUE)
  3026.   IF fs_frgt!
  3027.     GOTO vergisses                   ! und den Quatsch vergessen
  3028.   ELSE
  3029.     @fltr_fnam
  3030.     @show_action("Send "+showfile$) ! ... und anzeigen
  3031.     send_wp!=FALSE
  3032.     ck_first!=TRUE
  3033.     handle%=GEMDOS(&H3D,L:VARPTR(treatfile$),0)  ! Datei z. Lesen oeffnen
  3034.     REPEAT                                       ! Von Disk jeweils
  3035.       einhol%=GEMDOS(&H3F,handle%,L:512,L:puff%) ! Max. 512 Byte in Puffer
  3036.       IF einhol%=512                             ! Wenn 512 Byte
  3037.         anz%=512                                 ! den ganzen Puffer senden
  3038.       ELSE                                       ! wenn weniger,
  3039.         anz%=einhol%-1                           ! nur die restliche Zahl
  3040.       ENDIF
  3041.       ' ---------------------------------------------------------------------
  3042.       IF ck_first!
  3043.         ck_first!=FALSE
  3044.         IF wp_up!
  3045.           IF PEEK(puff%)<>31
  3046.             BMOVE XBIOS(2)+8000,scrn%,19200
  3047.             SHOWM
  3048.             @rsrc_gaddr(0,22,*adresse%,*ret)
  3049.             @draw_form
  3050.             TEXT 27*8-6,12*16+4,"Dies ist keine FirstWord-Datei im"
  3051.             TEXT 27*8-6,13*16+4,"WP-Modus. Ich kann sie nur senden"
  3052.             TEXT 27*8-6,14*16+4,"wenn ich die Upload-Umwandlung"
  3053.             TEXT 27*8-6,15*16+4,"rausnehme - darf ich?"
  3054.             @mind_box
  3055.             IF (DPEEK(adresse%+10+7*24) AND 1)=1
  3056.               DPOKE (adresse%+10+7*24),0
  3057.               wp_up!=FALSE
  3058.               @show_elud(135+18,0)
  3059.               BMOVE scrn%,XBIOS(2)+8000,19200
  3060.               HIDEM
  3061.             ELSE
  3062.               DPOKE (adresse%+10+6*24),0
  3063.               @show_action("Aborted")
  3064.               @disagree
  3065.               BMOVE scrn%,XBIOS(2)+8000,19200
  3066.               HIDEM
  3067.               GOTO vergisses
  3068.             ENDIF
  3069.           ENDIF
  3070.         ENDIF
  3071.       ENDIF
  3072.       ' ---------------------------------------------------------------------
  3073.       FOR is%=puff% TO puff%+anz%                ! Diese Anzahl Byte
  3074.         s_z%=PEEK(is%)                           ! falls noetig (wenn
  3075.         '                                        ! WP-Modes ein)
  3076.         IF wp_up!=TRUE                           ! durchsuchen und ggf.
  3077.           IF s_z%=128
  3078.             send_wp!=TRUE
  3079.             s_z%=0
  3080.           ENDIF
  3081.           IF send_wp!=TRUE
  3082.             IF s_z%=30 OR s_z%=28                  ! abaendern
  3083.               s_z%=32
  3084.             ENDIF
  3085.             IF s_z%=25
  3086.               s_z%=45
  3087.             ENDIF
  3088.           ELSE
  3089.             s_z%=0
  3090.           ENDIF
  3091.         ENDIF
  3092.         '
  3093.         IF GEMDOS(&H13)=-1                       ! und falls RS232 bereit
  3094.           VOID GEMDOS(&H4,s_z%)                  ! absenden
  3095.           PAUSE 1                                ! abbremsen
  3096.         ENDIF
  3097.         IF echo!=TRUE                            ! Wenn lokales Echo ein
  3098.           @to_screen(CHR$(s_z%))                 ! Zeichen auf Schirm
  3099.         ELSE                                     ! Wenn lokales Echo aus
  3100.           IF GEMDOS(&H12)=-1                     ! reinkomnende Zeichen
  3101.             rein%=GEMDOS(&H3)                    ! (falls Gegenstelle echot)
  3102.             @to_screen(CHR$(rein%))              ! auf Schirm
  3103.           ENDIF
  3104.         ENDIF
  3105.       NEXT is%
  3106.     UNTIL einhol%<>512                           ! bis der Puffer leer ist
  3107.     fehler%=GEMDOS(&H3E,handle%)                 ! Datei schliessen
  3108.     '
  3109.     @show_action("Done!")
  3110.     FOR snd_end%=1 TO 3
  3111.       @glocke
  3112.     NEXT snd_end%
  3113.   ENDIF
  3114.   vergisses:                           ! Falls OK ohne Datei
  3115.   von_tr!=TRUE                         ! Infor-Flag fuer Terminal
  3116. RETURN
  3117. '
  3118. PROCEDURE to_screen(output$)                       ! Zeichenausgabe auf Schirm
  3119.   IF output$>=" "
  3120.     IF CRSCOL<80
  3121.       PRINT output$;
  3122.     ELSE
  3123.       LET output$=CHR$(13)
  3124.     ENDIF
  3125.   ENDIF
  3126.   IF output$=CHR$(13)
  3127.     IF CRSLIN=25
  3128.       y_pos=CRSLIN
  3129.       PRINT AT(1,2);
  3130.       PRINT del_lines$;
  3131.       PRINT AT(1,y_pos);
  3132.     ELSE
  3133.       PRINT CHR$(13)
  3134.     ENDIF
  3135.   ENDIF
  3136. RETURN
  3137. '
  3138. PROCEDURE swap_scrn
  3139.   IF from_alt!
  3140.   ELSE
  3141.     VOID XBIOS(5,L:log_scrn%,L:phs_scrn%,-1)
  3142.     IF clr!
  3143.       CLS
  3144.     ENDIF
  3145.     clr!=FALSE
  3146.   ENDIF
  3147. RETURN
  3148. '
  3149. PROCEDURE draw_form
  3150.   @form_center(adresse%,*fxk%,*fyk%,*fw%,*fh%,*ret) ! Dialogbox zentrieren
  3151.   @objc_draw(adresse%,0,3,fxk%,fyk%,fw%,fh%,*ret)   ! Dialogbox zeichnen
  3152. RETURN
  3153. '
  3154. PROCEDURE show_scrn
  3155.   IF from_alt!
  3156.   ELSE
  3157.     VOID XBIOS(5,L:phs_scrn%,L:phs_scrn%,-1)
  3158.     IF gag!
  3159.       @put_log_scrn
  3160.     ELSE
  3161.       BMOVE log_scrn%,XBIOS(2),32000
  3162.     ENDIF
  3163.     gag!=FALSE
  3164.   ENDIF
  3165. RETURN
  3166. '
  3167. PROCEDURE scrn_save
  3168.   BMOVE XBIOS(2),log_scrn%,32000
  3169. RETURN
  3170. '
  3171. PROCEDURE scrn_show
  3172.   BMOVE log_scrn%,XBIOS(2),32000
  3173. RETURN
  3174. '
  3175. PROCEDURE mind_box
  3176.   @form_do(adresse%,name,*ret)
  3177. RETURN
  3178. '
  3179. PROCEDURE objc_draw(ob_drtree,ob_drstartob,ob_drdepth,ob_drxclip,ob_dryclip,ob_drwclip,ob_drhclip,ob_drreturn)
  3180.   '
  3181.   DPOKE GINTIN,ob_drstartob                       ! AES-Parameter in die
  3182.   DPOKE GINTIN+2,ob_drdepth                       ! entsprechenden
  3183.   DPOKE GINTIN+4,ob_drxclip                       ! Arrays übertragen
  3184.   DPOKE GINTIN+6,ob_dryclip
  3185.   DPOKE GINTIN+8,ob_drwclip
  3186.   DPOKE GINTIN+10,ob_drhclip
  3187.   LPOKE ADDRIN,ob_drtree
  3188.   GEMSYS 42                                       ! Befehl ausführen
  3189.   *ob_drreturn=DPEEK(INTOUT)
  3190. RETURN
  3191. '
  3192. PROCEDURE rsrc_load(name$,re_lreturn)
  3193.   '
  3194.   LET name$=UPPER$(name$)+CHR$(0)                 ! Namen aufbereiten
  3195.   LPOKE ADDRIN,VARPTR(name$)                      ! Adresse des Namens übergeben
  3196.   GEMSYS 110                                      ! Resource_Load aufrufen
  3197.   *re_lreturn=DPEEK(GINTOUT)
  3198. RETURN
  3199. '
  3200. PROCEDURE rsrc_gaddr(re_gtype,re_gindex,re_gaddr,re_greturn)
  3201.   '
  3202.   DPOKE GINTIN,re_gtype
  3203.   DPOKE GINTIN+2,re_gindex
  3204.   GEMSYS 112
  3205.   '
  3206.   *re_greturn=DPEEK(INTOUT)
  3207.   *re_gaddr=LPEEK(ADDROUT)
  3208. RETURN
  3209. '
  3210. PROCEDURE form_do(fo_dotree,fo_dostartob,fo_doreturn)
  3211.   '
  3212.   DPOKE GINTIN,fo_dostartob
  3213.   LPOKE ADDRIN,fo_dotree
  3214.   GEMSYS 50
  3215.   '
  3216.   *fo_doreturn=DPEEK(GINTOUT)
  3217. RETURN
  3218. '
  3219. PROCEDURE form_center(fo_ctree,fo_cx,fo_cy,fo_cw,fo_ch,fo_cresvd)
  3220.   '
  3221.   LPOKE ADDRIN,fo_ctree
  3222.   GEMSYS 54
  3223.   '
  3224.   *fo_cresvd=DPEEK(GINTOUT)
  3225.   *fo_cx=DPEEK(GINTOUT+2)
  3226.   *fo_cy=DPEEK(GINTOUT+4)
  3227.   *fo_cw=DPEEK(GINTOUT+6)
  3228.   *fo_ch=DPEEK(GINTOUT+8)
  3229. RETURN
  3230. '
  3231. ' -------------------- Xmodem
  3232. '
  3233. PROCEDURE xmodem_send(xs_name$)
  3234.   LOCAL oldx%,oldy%,ck_str%,xm_bad%,xm_ok%
  3235.   PRINT CHR$(27);"j";
  3236.   VOID XBIOS(21,0)                            ! Cursor aus
  3237.   @scrn_save
  3238.   @xm_box
  3239.   VOID XBIOS(15,-1,0,-1,-1,-1,-1)             ! Eventuelles Handshake aus
  3240.   block_numb%=1
  3241.   '
  3242.   xsend_top:
  3243.   OPEN "I",#1,xs_name$
  3244.   file_byte=LOF(#1)
  3245.   file_block=INT(file_byte/128)
  3246.   PRINT AT(5,10);UPPER$(showfile$);char$;" ist ";file_byte;" Byte lang.";" (";file_block;" Xmodem-Blöcke)."
  3247.   '
  3248.   xsend_1:
  3249.   abort$=INKEY$
  3250.   IF abort$=CHR$(24) THEN
  3251.     GOTO xsend_can
  3252.   ENDIF
  3253.   IF BIOS(1,1) THEN
  3254.     da%=BIOS(2,1)
  3255.     GOTO xsend_3
  3256.   ELSE
  3257.     GOTO xsend_2
  3258.   ENDIF
  3259.   '
  3260.   xsend_2:
  3261.   INC time_out
  3262.   PRINT AT(5,12);"Time out: ";time_out
  3263.   IF (time_out/500)=(500*60) THEN
  3264.     GOTO xsend_can     ! XMODEM CANCEL
  3265.   ELSE
  3266.     GOTO xsend_1
  3267.   ENDIF
  3268.   '
  3269.   xsend_3:
  3270.   IF da%=nak THEN
  3271.     GOTO xsend_5
  3272.   ENDIF
  3273.   IF da%=can THEN
  3274.     GOTO xsend_can
  3275.   ENDIF
  3276.   GOTO xsend_2
  3277.   '
  3278.   xsend_4:
  3279.   DO
  3280.     test!=BIOS(1,1)
  3281.     EXIT IF test!=0
  3282.     VOID INP(1)
  3283.   LOOP
  3284.   iorec=XBIOS(14,0)
  3285.   iorec_buffer$=STRING$(1024,0)
  3286.   DPOKE iorec+4,1024
  3287.   LPOKE iorec,VARPTR(iorec_buffer$)
  3288.   DPOKE iorec+6,0
  3289.   DPOKE iorec+8,0
  3290.   PRINT AT(5,8);"Block-Nummer: ";block_numb%;
  3291.   OUT 1,soh
  3292.   OUT 1,block_numb%
  3293.   block_comp%=0
  3294.   block_comp%=(255-block_numb%)
  3295.   OUT 1,block_comp%
  3296.   PRINT "    Block Compliment: ";block_comp%
  3297.   FOR byte%=1 TO 128
  3298.     PRINT AT(5,12);"Sende Byte Nr.: ";byte%
  3299.     OUT 1,ASC(MID$(block$,byte%,1))
  3300.   NEXT byte%
  3301.   OUT 1,checksum%
  3302.   GOTO xsend_6
  3303.   '
  3304.   xsend_5:
  3305.   block$=""
  3306.   block_dat%=0
  3307.   check%=0
  3308.   file_left=0
  3309.   make_block:
  3310.   file_left=file_byte-(128*(block_numb%-1))
  3311.   IF file_left<0 THEN
  3312.     finish!=TRUE
  3313.     OUT 1,eot
  3314.     GOTO xsend_6
  3315.   ENDIF
  3316.   PRINT AT(5,4);"Übrige Bytes: ";file_left;"  "
  3317.   IF file_left=>128 THEN
  3318.     FOR byte%=1 TO 128
  3319.       block_dat%=INP(#1)
  3320.       check%=check%+block_dat%
  3321.       block$=block$+CHR$(block_dat%)
  3322.     NEXT byte%
  3323.   ELSE
  3324.     FOR byte%=1 TO file_left
  3325.       block_dat%=INP(#1)                     ! EOF-Fehler passiert hier
  3326.       check%=check%+block_dat%
  3327.       block$=block$+CHR$(block_dat%)
  3328.     NEXT byte%
  3329.     pad=128-file_left
  3330.     block$=block$+STRING$(pad,0)
  3331.   ENDIF
  3332.   checksum%=0
  3333.   checksum%=check% AND 255
  3334.   PRINT AT(5,5);"LOC: ";LOC(#1)
  3335.   GOTO xsend_4
  3336.   '
  3337.   xsend_6:
  3338.   abort$=INKEY$
  3339.   IF abort$=CHR$(24) THEN
  3340.     GOTO xsend_can
  3341.   ENDIF
  3342.   IF BIOS(1,1) THEN
  3343.     da%=BIOS(2,1)
  3344.   ENDIF
  3345.   IF da%=ack AND finish!<>-1 THEN
  3346.     PRINT AT(5,14);"Our Checksum: ";checksum%;"  "
  3347.     INC block_numb%
  3348.     GOTO xsend_5
  3349.   ENDIF
  3350.   IF da%=ack AND finish!=-1 THEN
  3351.     GOTO xsend_complete
  3352.   ENDIF
  3353.   IF da%=nak THEN
  3354.     GOTO xsend_4
  3355.   ENDIF
  3356.   '
  3357.   xsend_can:
  3358.   OUT 1,can
  3359.   OUT 1,can
  3360.   CLOSE #1
  3361.   PRINT AT(12,19);"Status: ";"XMODEM ABORTED. ";char$;
  3362.   PRINT UPPER$(show_name$);char$;" not sent."
  3363.   PRINT AT(26,22);"PRESS ANY KEY TO CONTINUE"
  3364.   @show_action("Abort")
  3365.   FOR xm_bad%=1 TO 3                           ! Abbruch-Ton
  3366.     SOUND 1,15,5,4,15
  3367.     SOUND 1,0,0,0,0
  3368.     PAUSE 1
  3369.   NEXT xm_bad%
  3370.   SOUND 1,15,5,4,30
  3371.   SOUND 1,0,0,0,0
  3372.   VOID INP(2)
  3373.   GOTO xsend_end
  3374.   '
  3375.   xsend_complete:
  3376.   CLOSE #1
  3377.   PRINT AT(5,4);"Übrige Bytes: 0        "
  3378.   PRINT AT(5,5);"LOC: ";red$;"FILE-END";char$
  3379.   PRINT AT(12,19);"Status: ";"XMODEM DONE. ";char$;
  3380.   PRINT UPPER$(show_name$);
  3381.   PRINT char$;" completed."
  3382.   PRINT AT(26,22);"PRESS ANY KEY TO CONTINUE"
  3383.   @show_action("Fertig!")
  3384.   FOR xm_ok%=1 TO 3                            ! OK-Ton
  3385.     @glocke
  3386.   NEXT xm_ok%
  3387.   VOID INP(2)
  3388.   GOTO xsend_end
  3389.   '
  3390.   xsend_end:
  3391.   '  Void Xbios(15,-1,1,-1,-1,-1,-1)  !Parameter *******************
  3392.   @scrn_show
  3393.   PRINT CHR$(27);"k";
  3394.   VOID XBIOS(21,1)
  3395. RETURN
  3396. '
  3397. PROCEDURE xmodem_receive(xr_name$)
  3398.   LOCAL dummy$,dummy1$,oldx%,oldy%,ck_str%,xm_bad%,xm_ok%
  3399.   PRINT CHR$(27);"j";
  3400.   VOID XBIOS(21,0)                               ! Cursor aus
  3401.   @scrn_save
  3402.   @xm_box
  3403.   xmodem_top:
  3404.   '
  3405.   xmodem_part1:
  3406.   OPEN "O",#1,xr_name$
  3407.   VOID XBIOS(15,-1,0,-1,-1,-1,-1)     !  Turns XON/XOFF off...a <M><U><S><T>
  3408.   block%=1
  3409.   try%=1
  3410.   '
  3411.   xmodem_part2:
  3412.   @clear_modem
  3413.   VOID BIOS(3,1,nak)
  3414.   time_out=0
  3415.   '
  3416.   xmodem_part3:
  3417.   PRINT AT(10,7);rv1$;"Block: ";block%;"     Versuch: ";try%;"  "
  3418.   '
  3419.   xmodem_part4:
  3420.   PRINT AT(10,9);"Zeitlimit: ";time_out;"   "
  3421.   '
  3422.   xmodem_part5:
  3423.   abort$=INKEY$
  3424.   IF abort$=CHR$(24) THEN
  3425.     GOTO xmodem_part11
  3426.   ENDIF
  3427.   IF BIOS(1,1) THEN
  3428.     GOTO xmodem_part7
  3429.   ELSE
  3430.     GOTO xmodem_part6
  3431.   ENDIF
  3432.   '
  3433.   xmodem_part6:
  3434.   INC time_out
  3435.   IF (time_out/500)=(500*10) THEN
  3436.     GOTO xmodem_part11
  3437.   ENDIF
  3438.   IF (time_out/500)=INT(time_out/500) THEN
  3439.     GOTO xmodem_part2
  3440.   ELSE
  3441.     GOTO xmodem_part4
  3442.   ENDIF
  3443.   '
  3444.   xmodem_part7:
  3445.   da%=BIOS(2,1)
  3446.   IF da%=soh THEN
  3447.     GOTO xmodem_part8
  3448.   ENDIF
  3449.   IF da%=eot THEN
  3450.     GOTO xmodem_part12
  3451.   ENDIF
  3452.   IF da%=can THEN
  3453.     GOTO xmodem_part11
  3454.   ENDIF
  3455.   GOTO xmodem_part6
  3456.   '
  3457.   xmodem_part8:
  3458.   block_numb%=0
  3459.   block_comp%=0
  3460.   block_numb%=BIOS(2,1)
  3461.   block_comp%=BIOS(2,1)
  3462.   PRINT AT(10,11);"Block: ";block_numb%;"    ";"COMP: ";block_comp%;"  "
  3463.   PRINT AT(24,13);SPACE$(20)
  3464.   check%=0
  3465.   block$=""
  3466.   checksum%=0
  3467.   PRINT AT(10,13);"Byte received: ";"  "
  3468.   FOR byte%=1 TO 128
  3469.     PRINT AT(25,13);byte%;"  "
  3470.     da%=0
  3471.     byte_data:
  3472.     abort$=INKEY$
  3473.     EXIT IF abort$=CHR$(24)
  3474.     IF BIOS(1,1) THEN
  3475.       da%=BIOS(2,1)
  3476.       check%=check%+da%
  3477.       block$=block$+CHR$(da%)
  3478.     ELSE
  3479.       GOTO byte_data
  3480.     ENDIF
  3481.   NEXT byte%
  3482.   PRINT AT(25,13);(byte%-1);" Block complete!"
  3483.   IF abort$=CHR$(24) THEN
  3484.     GOTO xmodem_part11
  3485.   ELSE
  3486.     checksum%=check% AND 255
  3487.   ENDIF
  3488.   check:
  3489.   abort$=INKEY$
  3490.   IF abort$=CHR$(24) THEN
  3491.     GOTO xmodem_part11
  3492.   ENDIF
  3493.   check_sum%=0
  3494.   PRINT AT(10,15);SPACE$(50)
  3495.   PRINT AT(10,15);"Awaiting checksum..."
  3496.   IF BIOS(1,1) THEN
  3497.     check_sum%=BIOS(2,1)
  3498.     GOTO check_got
  3499.   ELSE
  3500.     GOTO check
  3501.   ENDIF
  3502.   check_got:
  3503.   PRINT AT(10,15);SPACE$(50)
  3504.   PRINT AT(10,15);"Checksum: ";checksum%;"     Check: ";check_sum%
  3505.   IF checksum%=check_sum% THEN
  3506.     GOTO xmodem_part9
  3507.   ELSE
  3508.     GOTO xmodem_part10
  3509.   ENDIF
  3510.   '
  3511.   xmodem_part9:
  3512.   PRINT #1,block$;
  3513.   try%=1
  3514.   INC block%
  3515.   time_out=0
  3516.   b_out=0
  3517.   @clear_modem
  3518.   OUT 1,ack
  3519.   GOTO xmodem_part3
  3520.   '
  3521.   xmodem_part10:
  3522.   INC try%
  3523.   IF try%>10 THEN
  3524.     GOTO xmodem_part11
  3525.   ELSE
  3526.     @clear_modem
  3527.   ENDIF
  3528.   GOTO xmodem_part2
  3529.   '
  3530.   xmodem_part11:
  3531.   OUT 1,can
  3532.   OUT 1,can
  3533.   OUT 1,can
  3534.   CLOSE #1
  3535.   KILL xr_name$
  3536.   PRINT AT(10,17);"Status:   XMODEM AORT.  ";
  3537.   PRINT UPPER$(showfile$);" deleted."
  3538.   PRINT AT(26,20);"-->PRESS ANY KEY<--"
  3539.   @show_action("Abort")
  3540.   FOR xm_bad%=1 TO 3                         ! Abbruch-Ton
  3541.     SOUND 1,15,5,4,15
  3542.     SOUND 1,0,0,0,0
  3543.   NEXT xm_bad%
  3544.   SOUND 1,15,5,4,30
  3545.   SOUND 1,0,0,0,0
  3546.   VOID INP(2)
  3547.   GOTO xmodem_end
  3548.   '
  3549.   xmodem_part12:
  3550.   OUT 1,ack
  3551.   CLOSE #1
  3552.   PRINT AT(10,17);"Status:   XMODEM DONE.  ";
  3553.   PRINT UPPER$(showfile$);
  3554.   PRINT char$;" done."
  3555.   PRINT AT(26,20);"-->PRESS ANY KEY<--"
  3556.   @show_action("Fertig")
  3557.   FOR xm_ok%=1 TO 3                          ! OK-Ton
  3558.     @glocke
  3559.   NEXT xm_ok%
  3560.   VOID INP(2)
  3561.   GOTO xmodem_end
  3562.   '
  3563.   xmodem_end:
  3564.   '  Void Xbios(15,-1,1,-1,-1,-1,-1)       ! Parameter *******************
  3565.   @scrn_show
  3566.   PRINT CHR$(27);"k";
  3567.   VOID XBIOS(21,1)                    ! Cursor ein
  3568. RETURN
  3569. '
  3570. PROCEDURE clear_modem
  3571.   DO
  3572.     test!=BIOS(1,1)
  3573.     EXIT IF test!=0
  3574.     VOID INP(1)
  3575.   LOOP
  3576.   '  @Clear_iorec_buffer(1024)
  3577. RETURN
  3578. '
  3579. PROCEDURE xm_box
  3580.   DEFFILL 1,0
  3581.   PBOX 10,25,630,390                          ! Rahmen
  3582.   BOX 13,28,627,387
  3583.   BOX 14,29,626,386
  3584.   BOX 15,30,625,385
  3585.   DEFTEXT 1,0,0,6
  3586.   TEXT 227,390," Abbruch mit Control-X "
  3587.   DEFTEXT 1,0,0,13
  3588. RETURN
  3589. '
  3590. PROCEDURE fehler                             ! Sollte nur bei Xmodem ansprechen
  3591.   LOCAL fehler
  3592.   fehler=ERR
  3593.   IF fehler=26 THEN                          ! EOF-Fehler
  3594.     RESUME NEXT                              ! Nicht beachten
  3595.   ELSE
  3596.     RESUME abfang
  3597.   ENDIF
  3598.   abfang:
  3599. RETURN
  3600. '
  3601. PROCEDURE glocke
  3602.   SOUND 1,15,10,4
  3603.   WAVE 1,1,9,10000,30
  3604. RETURN
  3605. '
  3606. PROCEDURE get_log
  3607.   IF logon!=TRUE
  3608.     @toggle_log(1)
  3609.   ELSE
  3610.     @toggle_log(0)
  3611.   ENDIF
  3612. RETURN
  3613. '
  3614. PROCEDURE toggle_log(tl_arg%)
  3615.   DEFFILL 1,2,8
  3616.   PBOX 242,0,302,14
  3617.   DEFFILL 1,0,0
  3618.   DEFTEXT 1,0,0,6
  3619.   GRAPHMODE 3
  3620.   IF tl_arg%=1
  3621.     TEXT 244,10,"LOG ON"
  3622.     logon!=TRUE
  3623.   ELSE
  3624.     TEXT 244,10,"LOG OFF"
  3625.     logon!=FALSE
  3626.   ENDIF
  3627.   GRAPHMODE 1
  3628.   DEFTEXT 1,0,0,13
  3629. RETURN
  3630. '
  3631. PROCEDURE show_capt(capt_state%)
  3632.   PUT 342,0,cvr_box$                   ! Abdecken
  3633.   GRAPHMODE 3
  3634.   DEFTEXT 1,0,0,6
  3635.   IF capt_state%>0
  3636.     TEXT 343,10,"   %"
  3637.     IF capt_state%=100
  3638.       TEXT 342,10,capt_state%
  3639.     ELSE
  3640.       TEXT 350,10,capt_state%
  3641.     ENDIF
  3642.   ELSE
  3643.     IF capt_state%=0
  3644.       TEXT 342,10,"OFF"
  3645.     ENDIF
  3646.     IF capt_state%=-1
  3647.       TEXT 342,10,"STBY"
  3648.     ENDIF
  3649.   ENDIF
  3650.   DEFTEXT 1,0,0,13
  3651.   GRAPHMODE 1
  3652. RETURN
  3653. '
  3654. PROCEDURE get_elud
  3655.   IF echo!=TRUE
  3656.     @show_elud(135,1)
  3657.   ELSE
  3658.     @show_elud(135,0)
  3659.   ENDIF
  3660.   IF lf!=TRUE
  3661.     @show_elud(135+9,1)
  3662.   ELSE
  3663.     @show_elud(135+9,0)
  3664.   ENDIF
  3665.   IF wp_up!=TRUE
  3666.     @show_elud(135+18,1)
  3667.   ELSE
  3668.     @show_elud(135+18,0)
  3669.   ENDIF
  3670.   IF wp_down!=TRUE
  3671.     @show_elud(135+27,2)
  3672.   ELSE
  3673.     @show_elud(135+27,0)
  3674.   ENDIF
  3675. RETURN
  3676. '
  3677. PROCEDURE show_elud(left_pos%,onoff%)
  3678.   IF onoff%>0
  3679.     GRAPHMODE 3
  3680.     DEFTEXT 1,0,0,4
  3681.     IF onoff%=1
  3682.       TEXT left_pos%,12,CHR$(8)
  3683.     ENDIF
  3684.     IF onoff%=2
  3685.       TEXT left_pos%,12,CHR$(247)
  3686.     ENDIF
  3687.     GRAPHMODE 1
  3688.     DEFTEXT 1,0,0,13
  3689.   ELSE
  3690.     PUT left_pos%,8,eludbox$
  3691.   ENDIF
  3692. RETURN
  3693. '
  3694. PROCEDURE fselbox(d_flt$,bxontxt$,sh_actn!)
  3695.   fs_frgt!=FALSE
  3696.   anew:
  3697.   @fsel_boxon(bxontxt$)
  3698.   FILESELECT pfad$,d_flt$,treatfile$
  3699.   IF RIGHT$(treatfile$)="\"
  3700.     IF sh_actn!
  3701.       @show_action("Select file!")
  3702.     ENDIF
  3703.     @fsel_boxoff
  3704.     @disagree
  3705.     GOTO anew
  3706.   ENDIF
  3707.   IF treatfile$=""
  3708.     IF sh_actn!
  3709.       @show_action("No file!")
  3710.     ENDIF
  3711.     @fsel_boxoff
  3712.     @disagree
  3713.     fs_frgt!=TRUE
  3714.   ENDIF
  3715.   @fsel_boxoff
  3716. RETURN
  3717. '
  3718. PROCEDURE fltr_fnam
  3719.   LOCAL ck_str%
  3720.   ck_str%=LEN(treatfile$)
  3721.   WHILE MID$(treatfile$,ck_str%,1)<>"\"
  3722.     DEC ck_str%
  3723.   WEND
  3724.   showfile$=RIGHT$(treatfile$,LEN(treatfile$)-ck_str%)
  3725.   '  Print Showfile$
  3726. RETURN
  3727. '
  3728. PROCEDURE fsel_boxon(fsbtxt$)          ! Erlaeuterungs-Box über Fileselect
  3729.   LOCAL fstb%
  3730.   DEFTEXT 1,0,0,13
  3731.   GET 199,29,441,51,fsboxhg$           ! Hintergrund retten
  3732.   DEFFILL 1,2,2
  3733.   PBOX 199,29,441,51
  3734.   BOX 200,30,440,50
  3735.   IF LEN(fsbtxt$)>28                   ! Textlaenge trimmen
  3736.     LET fsbtxt$=LEFT$(fsbtxt$,28)
  3737.   ENDIF
  3738.   fstb%=(29-LEN(fsbtxt$))*4+203        ! Text
  3739.   TEXT fstb%,45,fsbtxt$                ! einmitten
  3740.   DEFFILL 1,0
  3741. RETURN
  3742. '
  3743. PROCEDURE fsel_boxoff                  ! Erlaeuterungs-Box loeschen
  3744.   PUT 199,29,fsboxhg$
  3745.   CLR fsboxhg$
  3746. RETURN
  3747. '
  3748. ' Ende des Listings------------------------------------------------------------
  3749.